커널에 백그라운드로 돌고 있는 프로세스에 데이터를 전달할수 있는 방법이 있나요?

biokk의 이미지


test 라는 프로그램을 test & 로 백그라운드로 실행시켰는데요

test 프로그램은 while(bRuning) 을 이용해서 계속 돌고 있는 상태입니다

현재 종료는 kill pid를 이용해서 종료하고 있는데요

강제로 kill로 하니

init: untracked pid xxx exited 메시지가 출력이 되더라구요

test 프로그램 내에서 bRunning 의 값을 0으로만 해주면 프로그램이 안정적으로 종료될수 있는 상태인데

백그라운드로 실행중인 프로세스에 데이터를 전달할수 있나요? 아니면 지금처럼 kill을 이용해서 종료하는 방법이 괜찮은 방법인가요?

익명 사용자의 이미지

IPC나 RPC를 쓰면 됩니다.

indra의 이미지

단순히 변수를 플래그화 시켜서 변환하고 싶다면 다음과 같은 방법으로도 가능할 듯 싶네요..

... snip ...
 
int bRunning;
 
void sigusr1(int signo) {
 __LOG("[*] Got a SIGUSR1 signal.\n");
  bRunning = 0;
  return;
}
...
 
int main(void) {
...
 
 signal(SIGUSR1, sigusr1);
 
 bRunning = 1; 
 while(bRunning) {
 
  // while loop
 
 }
 return 0;
}
Sdsf3qUr의 이미지

kill에서 보내는 신호가 SIGTERM 입니다. 어떤 환경에서 짜시는지 모르겠지만 시스템 시그널 처리에 대해서 알아 보시면 좋을 것 같습니다.