0

system() を使用して、永続的な分岐プロセスを作成できないようです: (はい、params は問題ありません)

$args = "/code/perl/test/run $a $n $m $s $c &";
system($args);

しかし、反対に、このコードは機能しますが、パラメーターはありません。

system("/code/perl/test/reset &");

それで、問題は?私の C プログラム「実行」は、HTTP 要求からの PHP スクリプトの終了で即座に強制終了されます。

at デーモンを使用して、別の親プロセスを使用してプロセスを作成しようとしましたが、成功しませんでした。www-data が /etc/at.deny から削除されました

2 番目の例ではプログラムの出力が得られますが、最初の例では得られないことに注意してください。

4

2 に答える 2

1

ドキュメントから:

プログラムがこの方法で開始された場合、バックグラウンドで実行を継続するには、プログラムの出力をファイルまたは別の出力ストリームにリダイレクトする必要があります。そうしないと、プログラムの実行が終了するまで PHP がハングアップします。

そのため、すぐに終了する場合は、実行中と表示されない可能性が高くなりrunます。出力を別のファイルに送信してみてください。試してください: exec("/bin/echo $a $n $m $s $c > /tmp/echo &");診断を開始します。

その後、safe_mode をチェックしてescapeshellcmd. `最後の手段として、バックティック演算子を試してください。

于 2013-03-09T20:52:32.867 に答える
0

これは、PHP スクリプトが終了し、それに接続されているすべての子プロセスを強制終了した結果です。

「at」回避策が機能しない場合 (atd を使用して「今」にスケジュールする場合)、私の場合と同様に、回避策をコーディングする必要がある場合があります。私の回避策は、コマンドを /tmp/ のファイルに入れ、デーモンのコードにファイル内のコマンドを実行させ、それを切り捨てました。

于 2013-03-10T15:59:22.587 に答える