Linux는 고아 좀비 프로세스를 상속받을 때 init에 SIGCHLD를 보내나요?

Linux는 고아 좀비 프로세스를 상속받을 때 init에 SIGCHLD를 보내나요?

Linux가 고아 좀비 프로세스(원래 부모에 의해 재활용되지 않은 프로세스)를 상속하는 경우 해당 프로세스가 SIGCHLD(PID 1 프로세스)로 전송됩니까?init

답변1

예. 나는 그것을 테스트했다. 어디서 이런 일이 일어나는지 볼 수 있습니다리눅스 코드에서.


테스트: 중첩된 셸을 시작합니다. 다른 곳의 상위 쉘 kill -s STOP. 그런 다음 kill -s KILL하위 쉘, 상위 쉘입니다.

노트:

예를 들어, 내부적으로 이것을 시도하면 gnome-terminal수확기는 PID 1이 아닙니다. 하위 수확기, 즉 process 가 됩니다 systemd --user.

또한 systemd신호를 처리하려면 signalfd를 사용하세요. 따라서 strace -psystemd 프로세스에서 실행하면 수신된 신호가 표시되지 않습니다. 대신 epoll_wait() 및 파일 설명자 읽기()에서 systemd가 깨어나는 것을 볼 수 있습니다.

signalfd를 사용하여 파일 설명자 번호를 확인할 수 있습니다 ls -l /proc/<PID>/fd/<FD>. 그것은 말할 것입니다 anon_inode:[signalfd].

관련 정보