异步运行脚本/在不同的进程中

异步运行脚本/在不同的进程中

我有一个简单的 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

相关内容