在后台运行脚本将挂起子进程

时间:2015-06-04 15:40:53

标签: python bash csh

我正在运行启动

的脚本
run_app.py >& log.out

在run_app.py中,它将启动一些子进程,并将通过管道读取子进程的stdout / stderr。我可以运行该脚本,但如果我尝试通过以下方式将其放入后台:

run_app.py >& log.out &

run_app.py将在从子进程读取数据时挂起。它似乎与此线程相似: ffmpeg hangs when run in background

我的子进程也写了很多可能会溢出PIPE_BUF。

但是,我正在重定向并将我的stdout / stderr写入文件。当我将脚本保存到后台并且能够将输出保存到文件而不是将它们重定向到/ dev / null时,是否有任何建议可能会阻止挂起?

1 个答案:

答案 0 :(得分:2)

当后台进程正在运行时,其标准I / O流仍然连接到屏幕和键盘。如果进程尝试从键盘读取,则将暂停(停止)进程。

您应该收到类似以下内容的消息:Stopped (tty input)。那将被发送到shell的stderr。

通常重定向stdin会解决这个问题,但是有些程序直接访问键盘而不是使用stdin,通常是那些提示输入密码的程序。