2012-03-19 10 views
1

私はproc_openを使用して、C言語で作成されたプログラムを実行します。proc_openを使用した場合の無限ループ処理の扱い

私は "stdout"のファイルを使用していました。

#include "stdio.h" 

int main(){ 
    while(1){ 
     printf("Example"); 
    } 
    return 0 
} 

ファイルexample.outputが私のハードディスクがいっぱいになります:私は良いプログラムを実行していたが、私は以下のコードのような無限ループプログラムを実行していたときに問題が発生したときに

$descriptorspec = array(
    0 => array("pipe", "r"), 
    1 => array("file", "/tmp/example.output"), 
    2 => array("file", "/tmp/example.error", "a") 
); 

すべてが正常です。だから私はファイルを削除し、コンピュータを再起動する必要があります。私の質問は、このようなものをどう扱うかです。

感謝:)

+0

時間制限はありますか? (あなたが本当にあなたの ''を削除したくないのなら、 – hjpotter92

+0

無限ループを実行するときに何が起こるのでしょうか? –

+0

プログラムに無限ループがある場合は、まず修正してください。 –

答えて

0

あなたができる唯一のことは、proc_terminateを使用して偏見なしに問題のあるプロセスを虐殺(しかし、あなたは礼儀正しく、それは最初のしばらくの間、実行できるようにすることができ、実際にはそのための時間制限を課すことです完了するために)。例えば

$proc = proc_open(...); 
sleep(20); // give the process some time to run 
$status = proc_get_status($proc); // see what it's doing 
if($status['running']) { 
    proc_terminate($proc); // kill it forcefully 
} 

あなたはまだ、その後あなたの手の中に持っているすべてのハンドルをクリーンアップすることを忘れないでください。

+0

私は前に、 "ジャーヒー"のようなものを試してみるhttp://id.php.net/manual/en/function.proc-terminate.php#81353。 さらに私は削除その後のexample.outputファイルは、system()を使用して行いますが、私のハードディスク一杯になるまで何か案が? –

+0

@ SuunPinasthikaFajar:いいえ、あなた自身のデバッグをする必要があります、ごめんなさい。 – Jon

+0

ありがとう、しかし私はあなたのアドバイスを試します:)。たぶん私は何かを見つけるだろう。 –

関連する問題