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


10

때로는 bgbash에서 프로세스를 백그라운드로 한 후 같은 쉘에서 Enter를 눌러 프롬프트를 다시 표시 할 때 (백그라운드 프로세스의 일부 출력이 표시되었을 때 여전히 bash에 있는지 확인하기 위해) 백그라운드 프로세스가 자발적으로 중지되는 것 같습니다.

내가 할 경우 bg다시 같은 문제가 다시 발생합니다.

그것을 고치는 유일한 방법은 것 같습니다 fg.

왜 이런 일이 발생합니까?


출력은 어디로 가고 있습니까? 당신은 어딘가에 버퍼를 채우고 있습니까?
Paul Tomblin

답변:


12

일반적으로 프로세스가 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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.