一度に 1 つのプロセスだけを実行したい。だから私はチェックする必要があります。exec() を使用する提案があることがわかりました
そこで、テスト関数を作成しました.1分間スリープする関数と、プロセスが実行されているかどうかをテストする関数です。
public function test($a='', $b='') {
exec("ps ax | grep 'php -q /var/www/glab/index.php ajax/test2'", $pids);
if (count($pids) > 2) {
$exists = true;
echo 'exists' . count($pids);
print_r($pids);
}
}
そして、私は結果を得る:
exists3Array
(
[0] => 30680 pts/8 S+ 0:00 php -q /var/www/glab/index.php ajax/test2
[1] => 30684 ? S 0:00 sh -c ps ax | grep 'php -q /var/www/glab/index.php ajax/test2'
[2] => 30686 ? S 0:00 grep php -q /var/www/glab/index.php ajax/test2
)
3 つのプロセスを期待していませんでしたが、問題はありません。私の機能が正常に動作していることを確認できますか? > 2 の場合に実行を検出します。たとえば、一部のユーザーが Linux で何らかのプログラムを実行すると、これは機能しなくなるのでしょうか?
または、sh と grep を使用せずに、1 つのプロセスのみに一致するチェックを提案できますか? 私は正確な文字列を意味します。私は試していましたが、検索しているものだけに一致させることはできません。
編集:
もう少しグーグルして、より多くの例を見つけ、調整して、これを持っています:
exec ('ps -efa | grep "php -q /var/www/glab/index.php ajax/test2" |grep -v "grep " | awk "{print $10 $NF}"', $pids);
print_r($pids);
プロセスの実行時:
Array
(
[0] => darius 2046 12877 5 09:23 pts/8 00:00:00 php -q /var/www/glab/index.php ajax/test2
)
これで 1 つのプロセスに一致します。これで問題ないか確認していただけますか?