답변:
일반적으로 프로세스가 고아가되면 (즉, 부모가 죽으면) init에 의해 채택됩니다.
설명하는 특수 상황은 제어 터미널이 닫힐 때 ( Wikipedia에서 ) 대화식 프로세스에 적용됩니다 .
SIGHUP 신호는 제어 터미널이 닫힐 때 프로세스로 전송됩니다. 원래 직렬 회선 삭제 프로세스에 알리도록 설계되었습니다. 현대 시스템에서이 신호는 일반적으로 의사 또는 가상 터미널 제어가 닫 혔음을 의미합니다.
이를 방지하려면 하위 프로세스가 SIGHUP을 차단해야하므로 대부분의 경우 상위 프로세스의 협력이 필요합니다.
상위 프로세스가 쉘 ( bash
, csh
등)이고 bash가 완료 될 때 종료하지 않도록 실행하려는 명령을 원하면 명령 앞에 nohup
(from info coreutils "nohup invocation"
)을 추가 할 수 있습니다 .
'nohup'은 행 아웃 신호를 무시하고 지정된 COMMAND를 실행하므로 로그 아웃 한 후에도 백그라운드에서 명령을 계속 실행할 수 있습니다.
이 예에서 :
$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;
find
쉘이 제어 터미널을 종료하고 닫을 때 종료되지 않습니다 /dev/ttys000
.
쉘 스크립트가 SIGHUP을 차단해야하는 경우 여기 에 trap
설명 된대로 내장 기능을 사용 하십시오bash
.