为什么后台进程有时会自发停止?


10

有时,bg当我在bash中使用进程为背景设置一段时间后,当我在同一shell中按Enter键以重新显示提示时(只是在显示了后台进程的某些输出时检查我是否仍在bash中),后台进程似乎自发停止。

如果我bg再次做同样的问题。

解决它的唯一方法似乎是fg

为什么会这样?


您的输出要去哪里?您在某处填充缓冲区吗?
Paul Tomblin,

Answers:


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.