제가 fork를 해서 execvp 로 다른 응용프로그램을 호출 했습니다.
그리구 이 응용프로그램을 정상적으로 끝나게 했는데 이 프로세스가 defunct 상태가 되어버
립니다. fork를 하는 다른 응용프로그램을 보니
if( !::vfork() )
{
for(int fd=3; fd < 100 ;fd++)
::close(fd);
execvp(...)
}
위 코드에서 for문을 도는 이유가 무엇입니까?
그리고 fork를 이용해서 프로그램을 호출 할 때,
defunct 프로세스되는 것을 막는 방법은 무엇입니까?
자식 프로세스가 끝난 뒤 부모가 wait 또는 waitpid 를 호출하지 않으면 좀비(defunct) 상태가 남습니다. 부모에서 SIGCHLD 를 처리하거나 waitpid 를 호출하면 해결됩니다. for 문은 자식이 부모의 열린 파일 디스크립터를 물려받지 않도록 닫는 코드입니다.