0

一度に 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 つのプロセスに一致します。これで問題ないか確認していただけますか?

4

0 に答える 0