세션 리더가 종료되면 Unix 세션은 어떻게 되나요?

세션 리더가 종료되면 Unix 세션은 어떻게 되나요?

POSIX 신호 처리 및 작업 제어를 올바르게 에뮬레이션하려고 합니다.내 애완동물 운영체제, 그러나 세션 리더가 종료된 후 세션에 무슨 일이 일어나는지는 명확하지 않습니다.

예를 들어 여러 백그라운드 프로세스와 다양한 포그라운드 프로세스가 실행되는 동안 어린이가 세션 리더를 죽이는 경우와 같이 세션 및 해당 프로세스에 발생하는 상황과 관련된 문서를 찾을 수 없습니다.

테스트 결과 세션의 모든 프로세스가 종료된 것으로 나타났습니다. 그런데 어떻게 될까요?
특정 신호를 수신하고 있나요?
이 경우가 POSIX 표준에 지정되어 있습니까? 그렇다면 몇 가지 참고자료를 제공해 주실 수 있나요?

답변1

POSIX 세션으로 인해 혼란스러워하는 사람은 당신뿐만이 아닙니다. 레나트 포터링(연예인 systemd)또한 매우 혼란스럽습니다..

다들 아시다시피 세션 리더가 죽으면 init고아 세션이 상속되고,

  • 포그라운드 프로세스 그룹(있는 경우)의 모든 세션 멤버 프로세스는 SIGHUP을 수신합니다.

  • 포그라운드 그룹에 속하지 않은 세션 멤버 프로세스는 어떤 신호도 받지 않습니다.

또한보십시오:

모뎀이 끊어져서 터미널이 사라지고 회선이 로컬이 아닌 경우 SIGHUP이 세션 리더에게 전송됩니다. [...] 세션 리더가 죽으면 SIGHUP이 포그라운드 프로세스 그룹의 모든 프로세스로 전송됩니다. [...] 따라서 터미널이 사라지고 세션 리더가 작업 제어 셸인 경우 예를 들어 SIGHUP을 다시 보내 하위 항목에 대한 트랜잭션을 처리할 수 있습니다. 반면에 세션 리더가 SIGHUP을 포착하지 못하는 무고한 프로세스인 경우 이는 종료되고 모든 포그라운드 프로세스가 SIGHUP을 받게 됩니다.

안드리스 브라우어,리눅스 커널, 섹션 10.3 "회의".

관련 정보