Answers:
如果进程尝试从其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
。