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

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

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

おすすめ記事