如何检查PHP脚本是否正在运行?

时间:2012-04-08 21:30:06

标签: php daemon

如果我在PHP脚本中使用popen在Windows中启动PHP守护程序,如何再次检查该脚本是否仍在从PHP脚本运行?

我使用Apache,php作为模块

更新: 处理它是以

开始的
popen('start /b php process.php', 'r');

一旦在Windows中启动,就会启动php.exe进程。如果该进程仍在运行,如何从另一个PHP脚本中获取该进程PID以便稍后检查(它运行几个小时)?

我读了这个proc_open,它应该给出与proc_get_status一起启动的过程的PID,但是我使用popen的那个命令没有任何反应

更新:我注意到使用相同的命令和proc_open一个php.exe进程确实启动但它在启动它的脚本结束并且proc_get_status返回的PID与Windows PID不对应之后关闭

2 个答案:

答案 0 :(得分:2)

使用PHP和Windows安全运行进程有多种方法:

1。使用WScript.Shell对象

启动后台进程

您可以使用WScript.Shell对象的Run方法启动该过程,该方法是Windows内置的。通过改变第二个参数,可以使窗口隐藏,可见,最小化等。通过将第三个参数设置为false,Run不会等待进程完成执行。此代码仅适用于Windows。要了解有关COM的更多信息,请阅读PHP's documentation

$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("cmd /C dir /S %windir%", 0, false);

2。使用popen和pclose

启动后台进程

此代码应适用于Linux和Windows。

pclose(popen("start \"bla\" \"" . $exe . "\" " . escapeshellarg($args), "r"));

3。使用psexec

启动后台进程

此方法需要安装免费软件pstools from sysinternals

exec("psexec -d blah.bat"); 

通过阅读brief tutorial,您可以找到有关它的更多信息。我之前使用过第一种方法,它总是对我有效。


要查找现有流程的PID,我认为您不能使用getmypidposix_getpid,因此您必须使用exec('tasklist');。或者,您可以安装this extension并关注these instructions

答案 1 :(得分:0)

使用php的系统()

使用cmd.exe:

任务列表

如果你有Powershell:

GET-过程

未经测试。或者使用winapi调用编写您的小型控制台应用程序