как обрабатывать процесс бесконечного цикла при использовании proc_open - PullRequest
1 голос
/ 19 марта 2012

Я использую proc_open для запуска программы, созданной на языке c.

Я использовал файл для "stdout".

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

Все хорошо, когда я выполнял хорошую программу, но возникла проблема, когда я выполнял программу с бесконечным циклом, как показано ниже:

#include "stdio.h"

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

Файл example.output заполнит мой жесткий диск. Поэтому мне нужно удалить файл и перезагрузить компьютер. Мой вопрос, как справиться с чем-то вроде этого?

Спасибо:)

1 Ответ

0 голосов
/ 19 марта 2012

Единственное, что вы можете сделать, - это убить оскорбительный процесс без ущерба, используя 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
}

Не забудьте потом почистить все ручки, которые у вас еще есть в руках.

...