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