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

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

내가 command & exit터미널에서 할 때 왜 (예를 들어 vimiv & exit)비미브터미널이 닫혀도 계속 실행되나요? 기대했다비미브현재 터미널에서 백그라운드 작업으로 시작한 다음한숨터미널이 닫히고 나갈 때. 예를 들어, 다른 명령을 실행 vimiv &한 후에 실행하면exit비미브문을 닫을 것이다

답변1

나는 vimiv가 현재 터미널에서 백그라운드 작업으로 시작된 다음 터미널이 닫히고 종료될 때 한숨을 받을 것으로 예상했습니다.

아니요, 그런 일은 일어나지 않습니다. 그것이 다음과 같은 경우에만 (커널로부터) 신호를 vimiv받습니다.SIGHUP전경직업이든, 아니면중지됨백그라운드 작업. 하지만 둘 다 아닙니다. 실행 중인 백그라운드 작업입니다.

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

예를 들어, 다른 명령을 실행 vimiv &한 후에 실행하면 닫힙니다 .exitvimiv

이는 해당 프로그램에 특별한 것일 수 있습니다 . 터미널에 별도의 줄을 vimiv &입력하면 xclock &종료 되지 않습니다. 그러나 버튼에서 터미널을 닫으면 종료됩니다 . 이 경우 신호를 수신 하고 에 다시 보내기 때문입니다 .exitxclockXbashSIGHUPxclock

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

관련 정보