POSIX 신호 처리 및 작업 제어를 올바르게 에뮬레이션하려고 합니다.내 애완동물 운영체제, 그러나 세션 리더가 종료된 후 세션에 무슨 일이 일어나는지는 명확하지 않습니다.
예를 들어 여러 백그라운드 프로세스와 다양한 포그라운드 프로세스가 실행되는 동안 어린이가 세션 리더를 죽이는 경우와 같이 세션 및 해당 프로세스에 발생하는 상황과 관련된 문서를 찾을 수 없습니다.
테스트 결과 세션의 모든 프로세스가 종료된 것으로 나타났습니다. 그런데 어떻게 될까요?
특정 신호를 수신하고 있나요?
이 경우가 POSIX 표준에 지정되어 있습니까? 그렇다면 몇 가지 참고자료를 제공해 주실 수 있나요?
답변1
POSIX 세션으로 인해 혼란스러워하는 사람은 당신뿐만이 아닙니다. 레나트 포터링(연예인 systemd
)또한 매우 혼란스럽습니다..
다들 아시다시피 세션 리더가 죽으면 init
고아 세션이 상속되고,
포그라운드 프로세스 그룹(있는 경우)의 모든 세션 멤버 프로세스는 SIGHUP을 수신합니다.
포그라운드 그룹에 속하지 않은 세션 멤버 프로세스는 어떤 신호도 받지 않습니다.
또한보십시오:
- Notes.shichao.io/apue/ch9
- 제10장프로세스" 존재하다 리눅스 커널안드리스 브라우어(2003).
모뎀이 끊어져서 터미널이 사라지고 회선이 로컬이 아닌 경우 SIGHUP이 세션 리더에게 전송됩니다. [...] 세션 리더가 죽으면 SIGHUP이 포그라운드 프로세스 그룹의 모든 프로세스로 전송됩니다. [...] 따라서 터미널이 사라지고 세션 리더가 작업 제어 셸인 경우 예를 들어 SIGHUP을 다시 보내 하위 항목에 대한 트랜잭션을 처리할 수 있습니다. 반면에 세션 리더가 SIGHUP을 포착하지 못하는 무고한 프로세스인 경우 이는 종료되고 모든 포그라운드 프로세스가 SIGHUP을 받게 됩니다.
안드리스 브라우어,리눅스 커널, 섹션 10.3 "회의".