如何找出一个特定的进程仍然在PHP中运行

时间:2009-07-15 04:37:43

标签: php windows process system

我正在编写一个脚本来构建其他脚本的队列,并且应该管理它们的启动。管理器脚本应该知道哪个子进程已经完成,因此它可以启动在队列中等待的其他脚本。

我添加了一个“& echo $!”获取每个子进程的进程ID。所以我有我的子进程Process Ids,现在我正在使用系统“ps”程序调用来查找子进程是否仍在运行。

问题是我的脚本目前只在类Unix系统中运行。我不知道如何在Windows中获取我孩子的PID,而我的脚本还没有在Windows中解析“tasklist”命令的输出。

还有其他方法可以达到这个目的吗?任何in-PHP解决方案,以查找子进程是否仍在运行?启动其他进程(非阻塞)的解决方案,并检查它们是否仍在运行。

3 个答案:

答案 0 :(得分:0)

您可能会发现Process Control对Unix环境感兴趣。您还可以在Windows上找到以comment in the manual执行程序的示例,这使我想到了COM对象。

答案 1 :(得分:0)

您可以做的是创建一个包含您的流程ID的数据库或文件。每个进程都会在文件或数据库中写入他的pid(进程ID)。 使用此方法获取您的php pid:

getmypid();

您的监督流程将不时检查流程ID是否仍在运行,并显示以下内容:

function is_process_running($PID) {
  exec("ps $PID", $ProcessState);
  return(count($ProcessState) >= 2);
}

当进程停止时,您可以执行下一个进程

并使用Windows检查手册中的注释:http://no2.php.net/manual/en/book.exec.php#87943

答案 2 :(得分:0)

您是否尝试过proc_get_status()?在这种情况下,您可能希望使用proc_open()生成子进程。我不确定这是不是你想要的。