가장 좋은 방법은 부모가 죽을때 자식을 모두 죽이고 죽는 법이 가장 확실한 방법입니다. 그것이 가능하게 한는 방법은 SIGNAL 을 이용하는 방법입니다.
특히 자식프로세서를 죽이기 위하여 이용하는 것이 SIG_CHILD 를 이용합니다. 개론적인것은 부모가 자식을 만들때 자식의 PID 를 가지고 있다가 부보가 죽어야 할 상황에 이르면, 자식에게 KILL 을 날립니다. 자식이 죽으면 SIG_CHILD 시그널이 발생하므로 죽은 줄 알고 자기도 돌아가십니다.
말로는 쉬운데 구현하기 꽤 까다롭습니다. 머리를 많이 쓰셔야 할겁니다. 스티븐스의 NETWORK PROGRAMMING 에 보면 구현된것이 있었던 것으로 기억합니다.
단순히 죽이기만 하는거라면 시그널 핸들을 등록해서 kill()로 죽이면
단순히 죽이기만 하는거라면 시그널 핸들을 등록해서 kill()로 죽이면
될듯 합니다.
폴트 나면 핸들에서 저장된 자식들에게 kill ( pid, SIGUSR1 )
이렇게 사용자 시그널이나 기타 다른 시그널을 날려서 자식을 죽게
하면 큰 무리가 없을 듯 합니다.[/list][/list]
가끔은 밥을 굶어도 살 수 있다.
자식 fork 하기전에 자식과 부모간에 PIPE를 열어두고일정 간격으
자식 fork 하기전에 자식과 부모간에 PIPE를 열어두고
일정 간격으로 그 파이프 체크하는 간단한 방법도 있습니다.
부모가 죽는다면 파이프를 열어놓은 방식에 따라
자식이 파이프를 억세스 하려할때
읽기 혹은 쓰기 오류가 발생하겠죠.
또 다른 방법으로는 다른 데콘 프로세스들 처럼
some_daemon.pid 파일을 만들어 두고
부모 프로세스가 계속 touch 해서 시간을 바꿔놓고
자식들은 그 파일 변경 시간을 검사해서 일정 시간동안
변경이 되지 않으면 부모프로세스가 죽었다는걸 알 수도 있겠죠.
방법은 무궁무진하니....연구해보시기 바랍니다... :lol:
##########################################################
넘어지는건 아직 괜찮다.
하지만 넘어질때마다 무언가를 주워서 일어나자.
부보가 죽을때 자식이 알아서 죽는 가장 좋은 방법은...
없습니다. :evil:
가장 좋은 방법은 부모가 죽을때 자식을 모두 죽이고 죽는 법이 가장 확실한 방법입니다. 그것이 가능하게 한는 방법은 SIGNAL 을 이용하는 방법입니다.
특히 자식프로세서를 죽이기 위하여 이용하는 것이 SIG_CHILD 를 이용합니다. 개론적인것은 부모가 자식을 만들때 자식의 PID 를 가지고 있다가 부보가 죽어야 할 상황에 이르면, 자식에게 KILL 을 날립니다. 자식이 죽으면 SIG_CHILD 시그널이 발생하므로 죽은 줄 알고 자기도 돌아가십니다.
말로는 쉬운데 구현하기 꽤 까다롭습니다. 머리를 많이 쓰셔야 할겁니다. 스티븐스의 NETWORK PROGRAMMING 에 보면 구현된것이 있었던 것으로 기억합니다.
- 겨울아찌 -
- 겨울아찌 -
winchild@gmail.com
겨울아찌 정답~
겨울아찌가 정답입니다.
프로세스를 생성할때 pid를 보관하고 있다가 생성된 pid 로 kill 시스널을 보내면 됩니다.
단!
패어런트 프로세스가 정상적으로 동작하지 못할때를 대비해서.. 패어런트를 감시하는 와치독 프로세스가 하나더 있으면 좋을듯 합니다.
:( :shock:
부모 프로세스가 죽을때 자신이 죽는줄모르면..
부모프로세스가 자신이 죽는다는걸 모른다구요..?
그렇다면 kill() 을 사용할수는 없겠죠..
언제 죽는지도 모르는데 kill() 을 실행하라는건 말이안되니까요..
그럴때 위에서 파이프나 파일을 이용한방법등도 있는데
세마포어를 사용할수도 있습니다.
저같으면 세마포어 사용합니다. 부모프로세스가 시작할때 1로 셋팅할때
SEM_UNDO 로 셋팅하면 되겠죠..
----------------------------------------------------------------------------
댓글 달기