vfork 로 생성된 프로세스 죽이기

익명 사용자의 이미지

a 란 프로세스에서 무한루프를 돌면서
필요할때마다 다음과 같이 b라는 프로세스를 생성합니다.

while(1) {
................

if((pid=vfork())==0) execv("/bin/b",NULL);

.................
}

이렇게 하면 새로운 프로세스가 생기면서 b 가 수행되는데
문제는 b가 다 수행된 후 프로세스가 sleep 모드로 들어가 있습니다.
그리고 계속 새로운 프로세스가 생성되서 ps 해보면 sleep 모드에 있는
b 라는 프로세스가 엄청나네요.. 흑흑..
그래서 b 의 수행이 끝나면 프로세스도 같이 없애고 싶은데
어떻게 해야하나요?
고수님의 답변을...~~@!~~~~

익명 사용자의 이미지

sleep 모드가 아니고 좀비 아닌가요?

좀비를 없애 주시려면..

SIGCHLD 시그널 핸들러를 SIG_IGN 로 하시거나..-- signal(SIGCHLD,SIG_IGN)

직접 signal(SIGCHILD,&handler); 하셔서..

hanlder 에서..wait 함수나 waitpid 함수를 호출하시면 됩니다.~~~

익명 사용자의 이미지

캄사함다...
제가 착각을 했네요...
sleep 이 아니라 Z 로 좀비로 남았었던거네요...
알려주신데로 해서 해결된거 같습니다...

감사감사~ 수고하세요