종료를 통해 터미널을 닫은 후에도 명령이 계속 실행되는 이유는 무엇입니까?

종료를 통해 터미널을 닫은 후에도 명령이 계속 실행되는 이유는 무엇입니까?

command & exit터미널에서 실행할 때 왜 (예를 들어 vimiv & exit)비미프터미널이 닫혀도 계속 실행하시겠습니까? 나는 기대비미프현재 터미널에서 백그라운드 작업으로 시작하고 수신한숨을 쉬다터미널이 닫히고 나갈 때. 예를 들어, vimiv &다른 exit명령을 실행하면비미프폐쇄될 것이다

답변1

vimiv가 현재 터미널에서 백그라운드 작업으로 시작된 다음 터미널이 닫히고 종료될 때 한숨을 쉬게 하고 싶습니다.

아니요, 그렇지 않습니다. 신호인 경우 (커널에서) 신호만 받게 vimiv됩니다 .SIGHUP전망직업이든, 아니면중지됨배경작업. 하지만 둘 다 아닙니다. 실행 중인 백그라운드 작업입니다.

또는 bash(일반적으로 쉘이 아닌 특히 bash) 자체가 신호를 수신하여 SIGHUP거부되지 않은 모든 작업에 다시 보내는 경우입니다. 그러나 귀하의 예에서 쉘은 [1]에 의해 신호를 exit받았기 때문에 정상적으로 종료되지 않습니다 .SIGHUP

예를 들어, vimiv &다른 exit명령을 실행한 후에 vimiv닫히면

vimiv &이것은 이 프로그램에 약간 특이한 것일 수 있습니다. 터미널에 별도의 줄을 입력 xclock &하고 입력하면 프로그램이 종료되지 않습니다. 그러나 버튼을 통해 터미널을 닫으면 종료됩니다. 이 경우 신호가 수신되어 로 다시 전송되기 때문입니다 .exitxclockXbashSIGHUPxclock

[1] bash는 정상적으로 종료할 때 a를 보낼 수도 있지만, 이는 기본값이 아닌 SIGHUP사용될 수만 있습니다 .shopt -s huponexit

관련 정보