fork()에 대해서.
글쓴이: moonzoo / 작성시간: 금, 2003/12/12 - 4:47오후
parent가 fork()를 여러번 수행하여 다수의 child 프로세스들을
생성 했을 때,
1번 질문.
parent가 죽을때 child들을 다 죽이고 죽을려면
fork()할때마다 child 들의 pid들을 저장해 놓아야 할까요?
2번 질문
혹시 부모가 죽을때 child에게 SIGTERM을 날린다고
본적이 있는 듯--; 한데 그런가요?
3번 질문
parent에서 signal()을 걸어둔 것이 child에게도 그대로 상속되나요?
예를 들면 parent에서 signal(SIGTERM,sig_handle) 했을 때
자식도 sigterm을 받으면 sig_handle에서 처리되는 건가요?
Forums:
Re: fork()에 대해서.
그럴 필요 없구요.
pid 를 0으로 하면 집단(즉, 자신의 자식프로세스 집단)에게 신호를 보낼 수있습니다.
그럴까요? 그러면 자식들이 다 죽을텐데....
세상에 어느 부모가 나 죽으니 니네도 따라 죽어라 하겠습니까..
모든 것을 복사하죠.. 당연히 핸들러도 복사될거에요.
답변 달고, 질문을 되새겨 보니 질문하신 분의 의도를 알 것 같아요. 무
답변 달고, 질문을 되새겨 보니 질문하신 분의 의도를 알 것 같아요. 무엇 떄문에 이런 질문을 하시는지^^
자식을 fork 시키는 부모 프로세스(예를들어 daemon) 를 죽이기 위해 신호를 보내거나 kill 하면,
부모만 죽게되고 자식들은 모두 init을 부모로 하게 되고 여전히 살아있게 됩니다.
따라서, 부모프로세스만 죽임으로써, 그 아래 forking된 모든 자식들을 함께 죽이고자 하는 의도가 있는 것이라 예상됩니다.
제가 예상한 것이 맞나요?
..
친절한 답변에 감사드립니다.
님께서 예상하신 것이 맞습니다.
pid를 0으로 해서 보내는 것을 몰랐는데..좋더군요..
일단은 부모프로세스 pid를 저장해 두었다가..
signal handler에서 부모프로세스 일 경우에만
pid 0으로 해서 kill() 하는 것으로 처리했습니다..
더 좋은 방법이 있는지는 모르겠는데..일단은 잘 처리되어서
기쁘네요 ^^
댓글 달기