카테고리 없음

[리눅스] 프로세스 '[avconv] <defunct>'종료

행복을전해요 2021. 2. 17. 17:47

<defunct>프로세스가 이미 종료 된, 따라서 살해 할 수는 없지만,있는 부모가 아직 (대기 시스템 호출 중 하나를 호출하지 않은 과정이다 wait, wait3, wait4, waitpid, 등이 ...) 종료 상태를 읽을 수 있습니다. 결과적으로 프로세스 정보는 부모가 결국 상태를 얻으려고 시도하는 경우 시스템에 의해 유지됩니다. 이러한 프로세스는 부모가 종료 상태를 읽을 때 사라집니다.

이러한 <defunct>프로세스는 부모가 죽을 때도 사라집니다. init프로세스가 프로세스의 소유권을 가져와 상태를 획득 (및 폐기)하기 때문입니다.

호출 <defunct>을 발행하는만큼 wait시스템 호출 을 발행하여 프로세스를 피할 수 있습니다 fork.

또는 JF Sebastian이 지적했듯이 <defunct>SIGCHLD 신호 처리를 SIG_IGN으로 설정 (신호 무시)하거나 SIGCHLD 신호 처리기를 등록 할 때 (또는 SIG_DFL로 기본 처리를 재설정 할 때) SA_NOCLDWAIT 플래그를 사용하여 프로세스를 피할 수도 있습니다. sigaction. 그러나이 경우 자녀의 종료 상태는 부모에게 제공되지 않으며 단순히 버려집니다.



출처
https://stackoverflow.com/questions/22079827