백그라운드 프로세스를 시작한 다음 창의 닫기 버튼을 사용하여 터미널을 닫으면 백그라운드 프로세스가 종료됩니다. 그러나 Ctrl+ 를 사용하여 터미널을 닫으면 D백그라운드 프로세스가 계속 실행됩니다.
sam@Sam-Pc:~$ yes > /dev/null &
[1] 10219
// I then close the terminal a reopen a new one
sam@Sam-Pc:~$ ps aux | grep yes
sam 10295 0.0 0.0 15948 2152 pts/8 S+ 00:54 0:00 grep --color=auto yes
이제 Ctrl+를 사용하여 D터미널을 닫습니다 .
sam@Sam-Pc:~$ yes > /dev/null &
[1] 10299
sam@Sam-Pc:~$Ctrl-D
// I then reopen a new terminal
sam@Sam-Pc:~$ ps aux | grep yes
sam 10219 99.4 0.0 11404 812 ? R 00:52 2:01 yes
sam 10295 0.0 0.0 15948 2152 pts/8 S+ 00:54 0:00 grep --color=auto yes
누구든지 이 동작을 설명할 수 있나요?
감사해요!
답변1
닫기 버튼을 사용하여 창이 닫히면 쉘은 SIGHUP을 백그라운드 프로세스로 보내고 터미널이 닫힐 때 쉘도 SIGHUP을 수신합니다. 프로세스에 대한 일반적인 응답은 종료이므로 백그라운드 작업이 종료됩니다.
반면에 Cntl+를 누르면 D아무런 신호도 보내지 않지만 STDIN에 EOF(파일 끝)가 표시되고 쉘(및 터미널)이 닫힙니다. EOF는 기본적으로 STDIN이 종료되었으며 더 이상 입력할 내용이 없음을 의미합니다. EOF는 백그라운드 작업과 관련된 응답을 트리거하지 않으므로 계속 진행됩니다.