我有一个简单的 php 脚本
<?php
for($i=0;$i<10;$i++){
sleep(1);
echo $i;
}
我从命令行运行
php myfile.php &
我希望即使在脚本结束之前我也可以在命令行中执行其他操作。
我确实收到了提示,但是当我按 Enter 键时,我得到了
[1]+ Stopped php myfile.php
答案1
如果您的终端启用了该选项,则这是预期的tostop
。设置后,任何尝试输出到终端的后台进程都会收到SIGTTOU
信号,该信号的默认处理程序会停止该进程。 (这样做是为了确保后台进程的输出不会弄乱您的终端。)
您可以通过stty -tostop
在同一终端中运行 , 来禁用此功能。
您目前的情况:
$ stty tostop
$ php ./t.php &
[1] 6484
$
[1]+ Stopped php ./t.php
$ # no messing up of the terminal, process stopped
$ fg
php ./t.php
0^C
$
禁用该功能:
$ stty -tostop
$ php ./t.php &
[1] 6481
$ # 01an2d 3now 45 6it m7esses 8up 9my term!
答案2
可能有更好的解决方案,但对我来说,在 Ubuntu 上,如果你在前台运行它并使用 挂起它,它就可以工作Ctrl-Z,然后用以下内容作为背景bg
:
$ php myfile.php
^Z
[4]+ Stopped php myfile.php
$ bg
[4]+ php myfile.php &
$ 2#3 it4 mess5es up 6my 7term8in9al too!
[4] Done php myfile.php