非同期/他のプロセスでスクリプトを実行する

非同期/他のプロセスでスクリプトを実行する

単純な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

関連情報