존재하다리눅스 프로그래밍 인터페이스:
SIGHUP은 프로세스 그룹이 고아 프로세스가 될 때 생성됩니다.
대화형 bash 중에
$ ( sleep 123 &)
먼저 하위 쉘이 분기된 다음 해당 하위 쉘이 실행을 위해 분기됩니다 sleep 123 &
. 서브쉘은 sleep 123
완료를 기다리지 않고 즉시 종료됩니다 &
.
프로세스가
sleep
고아 프로세스입니까? (그렇게 생각해요,그림 34.3)sleep
프로세스가 분리되었기 때문에 SIGHUP이 전송되고 있습니까? (인용에 따르면 그런 것 같아요)sleep
SIGHUP이 전송되었음에도 프로세스가 종료되지 않는 이유는 무엇입니까 ? (나는 모른다)
감사해요.
데몬 프로세스를 생성할 때 비슷한 문제가 발생했습니다. 먼저 하위 프로세스를 포크한 다음 하위 프로세스가 손자를 포크하고 즉시 종료했습니다. 손자가 SIGHUP을 보내지 않고 고아가 되어 종료됩니까?
답변1
~에서Open Group 기본 사양 2018년 7호판,시스템 인터페이스, 아래에_exit
:
프로세스가 제어 프로세스인 경우 SIGHUP 신호는 호출 프로세스의 제어 터미널에 속하는 전경 프로세스 그룹의 각 프로세스로 전송됩니다.
프로세스가 제어 프로세스인 경우 세션과 연결된 제어 터미널은 세션에서 연결을 해제하여 새로운 제어 프로세스가 세션을 획득할 수 있도록 해야 합니다.
프로세스 종료로 인해 프로세스 그룹이 고아 프로세스가 되는 경우,새로 고아가 된 프로세스 그룹의 구성원이 중지된 경우, SIGHUP 신호는 새로 격리된 프로세스 그룹의 각 프로세스로 전송되어야 하며 그 뒤에 SIGCONT 신호가 전송되어야 합니다.