私の php スクリプトでは、実行する一連のコンソール コマンドを生成します。次の各コマンドは前のコマンドの結果に依存するため、順序は厳密です。私が使う ';' コマンド間の区切り文字。
通常の状況では、そのシーケンスを exec() するだけで問題なく動作します。しかし、このシーケンスをナイスにしてバックグラウンドで実行する必要がある場合があります。' > /dev/null &' を追加することで、1 つのコマンドをバックグラウンドで実行できることを読みました。しかし、シーケンスを使用して、さまざまなアプローチを試みましたが、役に立ちませんでした。exec() は、この仕事に適した関数ではないかもしれないと感じています。
これはどのように行うことができますか?私が理解している限り、各コマンドの前に「nice -n 10」を追加する必要があります。
更新1:
私が現在使用しているコード:
$cmd[] = '...';
//...
$cmd[] = '...';
//...
if($inBackground)
{
foreach($cmd as &$command)
$command = 'nice -n 10 '.$command.' > /dev/null ';
}
if($inBackground)
exec(implode(' ; ', $cmd).' &');
else
exec(implode(' ; ', $cmd));
更新 2:
マリオのヒントを使用してコードを変更したところ、動作するようになりました。
$cmd[] = '...';
//...
$cmd[] = '...';
//..
$command = implode(' ; ', $cmd);
if($inBackground)
$command = "nice sh -c '".$command."' > /dev/null &";
exec($command);
コマンドが適切にエスケープされ、一重引用符が含まれていないことを確認しました。