什么会阻止任务在后台运行?

chu*_*die 3 job-control

我有一个我正在尝试启动的脚本

php ./Script.php &
Run Code Online (Sandbox Code Playgroud)

任务进入后台,但已停止。当我尝试用 bg 运行它时,它只是保持停止状态。

$ jobs
[1]+  Stopped                 php ./Script.php
$ bg
[1]+ php ./Script.php &

[1]+  Stopped                 php ./Script.php
$
Run Code Online (Sandbox Code Playgroud)

ps 将作业状态显示为 T

$ ps ax | grep Script
951 pts/5    T      0:00 php ./Script.php
Run Code Online (Sandbox Code Playgroud)

cat /proc/PID/wchan 显示“pipe_wait”

更新:

任何 PHP 脚本都会发生这种情况,甚至<?php sleep(1000);

更新:

感谢所有精彩的回答和评论。我明白为什么现在在技术层面上会发生这种情况,但我不确定某些版本的 PHP 是什么导致了这种情况。但是,这不是 *nix 问题。

Kyl*_*nes 5

几乎可以肯定,当命令不在前台进程组中时,它会尝试从终端读取。这将导致内核向进程发送 SIGTTIN,默认情况下会停止进程。一个简单的测试是将 stdin 重定向到 /dev/null。如果进程在后台运行而没有停止,那么问题是如上所述的 SIGTTIN。