2010-08-11 2 views
2

내 프로그램의 주 프로세스는 프로세스 ID를 pid1, pid2, pid3라고하는 3 가지 프로세스를 포크합니다. Pid1과 pid2 프로세스는 무한 루프에 있습니다. 내가 원하는 것은 pid3 프로세스가 주 프로세스를 포함하여 모든 프로세스를 끝내고 종료 될 때입니다. 현재로서는 다음과 같이 사용하고 있습니다 :신호로 C에서 프로세스를 Kiling하기

wait(pid3); 
kill(0, SIGKILL); 

위의 내용은 모두 말했지만, 터미널에서 Killed를 인쇄합니다. 나는 그 신호가 아무 것도 죽이지 않고 실제로 보이기를 원하지 않지만, 프로그램을 정상적으로 종료한다. 어떻게해야합니까?

답변

5

대신 SIGTERM을 사용하고 SIGTERM을 수신하면 깨끗한 종료 (예 : exit(0))를 수행하는 신호 처리기를 설치하십시오.

+2

사실, 프로그램의 호출자가 사용자가'kill'명령 ('kill'명령의 정상 동작)을 사용하여 그것을 죽였는지를 탐지 할 수 있기를 원할 수 있기 때문에,'kill'명령과 같은 별도의 신호를 사용하는 것이 더 낫습니다. SIGUSR1'을 사용하여 다른 프로세스에게 종료해야 함을 알립니다. –

1

또 다른 방법은 프로세스 사이에 pipe()을 설정하고 파이프에서 파일 끝을 볼 때 pid1 및 pid2 프로세스를 종료하는 것입니다.

관련 문제