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