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