백그라운드 프로세스가 때때로 갑자기 중지되는 이유는 무엇입니까?

백그라운드 프로세스가 때때로 갑자기 중지되는 이유는 무엇입니까?

때로는 bash를 사용하여 프로세스를 백그라운드로 설정한 후 bg동일한 셸에서 Enter를 눌러 프롬프트를 다시 표시할 때(백그라운드 프로세스의 일부 출력을 표시하는 동안 아직 bash에 있는지 확인하기 위해), 백그라운드 프로세스가 자동으로 중지되는 것 같습니다.

이 작업을 다시 수행 하면 bg동일한 문제가 다시 발생합니다.

이 문제를 해결하는 유일한 방법은 fg.

왜 이런 일이 발생합니까?

답변1

stdin이는 일반적 으로 프로세스가 스트림에서 데이터를 읽으려고 할 때 발생합니다. 프로세스가 백그라운드에 있을 때,TTIN 신호따라서 정지됩니다(STOP 신호와 동일한 동작). 이중 신호도 있습니다TTOU백그라운드 프로세스가 터미널에 쓰기를 시도할 때.

이를 포그라운드로 가져오면 프로세스가 재개되고 터미널에서 데이터를 읽을 수 있습니다.

데모:

$ cat t.sh
#! /bin/sh
sleep 1
read dummy
$ ./t.sh &
[1] 3364
$ 
[1]+  Stopped                 ./t.sh
$ ps aux|grep t.sh
me  3364  0.0  0.0  11268  1200 pts/0    T    17:04   0:00 /bin/sh ./t.sh

이를 방지하는 한 가지 방법은 다음을 사용하는 것입니다.nohup하지만 프로그램이 입력 스트림을 /dev/null.

관련 정보