부모 프로세스가 죽을 때.
글쓴이: moonzoo / 작성시간: 수, 2003/08/13 - 9:02오전
부모 프로세스가 죽을때 자식프로세스를 죽일려면 어떻게 해야 할까요?
구체적으로 예를 들면
A라는 부모 프로세스에서 system("vi xxx.dat"); 를 콜 했습니다.
sh -c vi xxx.dat 라는 이름을 가지는 B 프로세스(A의 자식)가 생기고
vi xxx.dat 라는 C 프로세스(B의 자식) 가 생깁니다.
이 system("~~")이라는 콜이 종료하기 전에 (즉 vi를 연 상태에서)
A 프로세스에게 SIGTERM을 보냈더니 A는 제대로 죽는데
vi를 열었던 terminal에 vi에 열었던 내용들을 마구 뿌리면서 루프를 도는
현상이 발생합니다. 즉 B,C가 정상 종료가 안되고 문제를 발생시키네요.
질문1. 요지는 A를 죽일때 B,C를 죽여야 할꺼 같은데
어떠한 방법이 좋을까요?
(즉 부모가 죽을때 자식들을 깔끔히 죽이고 정리하는 방법.)
질문2. 원래 부모가 죽을때 자식들에게 SIGTERM 을 날리지 않나여?
Forums:
parent process에서 SIGTERM을 signal을 잡아서 자식
parent process에서 SIGTERM을 signal을 잡아서 자식들을 kill하고 자신도 exit 하는 루틴으로 하면은 될 것 궅군요.
이부분은 signal 부분을 보시면은 도움이 되실겁니다.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
..
답변 감사드립니다..
제가 가장 궁금하게 생각했던 부분은
언제 자식들을 죽이냐는 부분아 아니고
어떻게 자식들을 죽여야 할까 였습니다.
system()이라는 콜을 했을때 자식들 프로세스 id를 구하는 부분이
좀 번거로울 꺼 같아서..
(현재로선 전체 process list들을 다 훑어봐야 하기 때문에..)
명시적으로 자식들의 pid를 구하는 과정 없이 ..혹시 다른
방법이 있는지가 가장 궁금하네요..
흠...글쎄요...system(); 이나 exec(); 류의
흠...
글쎄요...
system(); 이나 exec(); 류의 콜로 실행한 것에 대한 pid를 알 수 있는 방법이 없을거 같은데...
이런 방법 보다는...
setsid(); 를 이용해서 최상위의 프로세스를 session leader로 만든 후...
사용을 하시면 될 것 같군요...
원래...
session leader가 종료를 하게 되면은...
그놈의 자식들은 따라서 알아서 죽게 됩니다.
제가 알기론...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
댓글 달기