6

ほとんどスリープ状態の CLI スクリプトを実行しています。スクリプトは約 10 秒ごとに何かを実行します。問題は、スリープ中にスクリプトが 94% の CPU 使用率で座っていることです。

私が設定した方法は次のとおりです。

while(1){
    sleep(10);
    doStuff();
}

これは意図したとおりに機能しますが、明らかな問題があります。C++/Java では、ループの問題を解消するタイマーを設定するだけで済みました。また、cronジョブが必要ないことを望んでいました。

これを行う別の方法はありますか?


アップデート

どうやら私の元のスクリプト (かなり大きい) は実際にはスリープ モードに入らなかったため、while ループが実行されて CPU サイクルが中断され、消費されました。同じ問題を抱えている人は、そうではないことを確認してください。

4

2 に答える 2

3

以前、PHP スクリプトをデーモンにする必要があったときは、ここで概説されている PEAR モジュールを使用しました: http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/

PEAR モジュールを使用したくない場合は、そのソース コードを調べて、同様のことを行うことができます。

于 2012-09-12T02:42:09.737 に答える
1

私のスクリプトは次のようにセットアップされました:

define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep

while(1){
    if($sleep){
        sleep(THREAD_SLEEP);
    }

    $sleep = true; // By default, the script enters sleep mode each loop.

    if(doSomethingAndHaveMoreToDo()){
        $sleep = false; // If more stuff to do, remove sleep and keep doing it.
    }
}

問題は、スクリプトが に設定$sleepされたままだったためfalse、スリープ モードに入ることがなく、ほぼ 100% の CPU を使用していたことです。

于 2012-09-12T03:06:07.817 に答える