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

Runing a script in background will hang the subprocess

我正在运行创建一个启动脚本

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 时,是否有任何建议可以防止挂起?

当后台进程 运行 时,其标准 I/O 流仍连接到屏幕和键盘。如果进程试图从键盘读取,它们将被挂起(停止)。

您应该收到一条消息,内容如下:Stopped (tty input)。那会被发送到 shell 的标准错误。

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