"하위 수확기" 프로세스란 무엇입니까?

"하위 수확기" 프로세스란 무엇입니까?

일부 답변에서는 "subreaper"라는 단어를 사용했습니다. Google에서 검색하면 "방금 사용됨"이라는 단어도 검색됩니다.

"하위 수확자"가 무엇인지 어떻게 이해합니까?

답변1

이는 다음과 같이 구현되었습니다.리눅스 커널 3.4시스템 호출의 플래그로prctl().

prctl(2)맨페이지 에서 :

init(1)[...] Sub-Reaper는 하위 프로세스의 역할을 수행합니다. 고아 프로세스(즉, 직계 부모가 종료됨)가 종료되고 자식 리퍼가 있는 것으로 표시되면 가장 가까운 생존 조상 자식 리퍼가 신호를 받고 해당 프로세스에서 자신의 종료 상태를 발견 SIGCHLD할 수 있습니다 .wait(2)

프로세스는 자신을 하위 리퍼로 정의할 수 있습니다 prctl(PR_SET_CHILD_SUBREAPER). 그렇다면 init(PID 1)이 아니며 고아의 부모가 됩니다.하위 프로세스대신, 하위 수확자로 표시된 가장 가까운 생존 조부모가 새 부모가 됩니다. 살아계신 조부모님이 없다면 init요.

이 메커니즘을 구현하는 이유는 사용자 공간 서비스 관리자/감독자(예:upstart,systemd) 시작하는 서비스를 추적해야 합니다. 많은 서비스가 이중 포크를 통해 데몬화되고 암시적으로 획득됩니다.재육아PID 1로. 서비스 관리자는 더 이상 신호를 수신할 수 없으며 SIGCHLD더 이상 수집에 대한 책임을 지지 않습니다.wait(). PID 1 정리가 프로세스를 다시 부모화하면 하위 프로세스에 대한 모든 정보가 손실됩니다. 서비스 관리자 프로세스는 이제 자신을 일종의 "하위 초기화 프로그램"으로 표시할 수 있으며 이제 시작된 서비스에 대해 생성된 모든 고아 프로세스의 상위 프로세스로 남을 수 있습니다. 모든 SIGCHLD신호는 서비스 관리자에게 전달됩니다.

Linux에서는 일반적으로 다음 명령을 사용하여 데몬 프로세스가 생성됩니다.분기두 번 모두 손자를 포크한 후 중간 프로세스가 종료되었습니다. 피하기 위한 일반적인 기술입니다.좀비 프로세스. 초기화 스크립트는 하위 프로세스를 호출합니다. 해당 자식이 또 포크해서 바로 종료했습니다. 손자는 입양될 예정 이며 좀비를 피하기 위해 후손을 모으는 종료 상태를 init계속 호출합니다 . wait()하위 리퍼 개념을 사용하면 사용자 공간 서비스 관리자가 이제 init.

관련 정보