달리기를 주장한 사용자의 답변을 읽었습니다.
foo 2>&1 >& output.log &
초래 foo
가 로그 아웃 할 경우에도 계속 실행. 이 사용자에 따르면 SSH 연결에서도 작동했습니다.
SSH와의 연결을 끊거나 TTY를 종료하는 경우 쉘과 프로세스가 SIGHUP을 수신하여 종료 될 것이라는 인상을 받고 있다고 믿지 않았습니다. 이것은, 내 가정에서, 사용하는 유일한 이유였다 nohup
이러한 경우에, 또는 tmux
, screen
등.
그런 다음 glibc의 매뉴얼 을 살펴 보았습니다 .
이 신호는 또한 터미널에서 제어 프로세스의 종료를 해당 세션과 연관된 작업에보고하는 데 사용됩니다. 이 종료는 세션의 모든 프로세스를 제어 터미널에서 효과적으로 연결 해제합니다.
이것은 내 생각을 확인하는 것 같습니다. 그러나 더 찾고, 그것을 말한다 :
프로세스가 제어 터미널이있는 세션 리더 인 경우 SIGHUP 신호는 포 그라운드 작업의 각 프로세스로 전송되며 제어 터미널은 해당 세션에서 연결 해제됩니다.
이것은 백그라운드에서 작업이 SIGHUP을받지 못한다 는 것을 의미 합니까?
내 더 혼란에, 나는 대화 형 zsh을 세션으로 실행을 실행 yes >& /dev/null &
하고, 입력 exit
zsh을 내가 작업을 실행했다고 나에게 경고 할 때, 그리고 입력 한 후 exit
두 번째 시간, 그것은 SIGHUPed 하나 개의 작업을 한 것으로 나에게 말했다. Bash에서 정확히 똑같이하면 작업이 실행됩니다.
logout
되었으며yes
여전히 실행 중입니다.