使用proc_open时如何处理无限循环过程

时间:2012-03-19 08:54:03

标签: php proc-open

我使用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 :(得分: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
}

不要忘记清理手中仍有的手柄。