如何检查PHP脚本是否正在运行?
如果我在Windows中从一个PHP脚本启动一个带有如何检查PHP脚本是否正在运行?,php,daemon,Php,Daemon,如果我在Windows中从一个PHP脚本启动一个带有popen的PHP守护进程,我如何再次检查该脚本是否仍在从PHP脚本运行 我使用Apache,php作为模块 更新: 开始的过程 popen('start /b php process.php', 'r'); 在windows中启动后,将启动php.exe进程。如果该进程仍在运行,如何让该进程PID稍后从另一个PHP脚本检查(它运行了数小时) 我读了这篇文章,它应该给出与proc\u get\u status一起启动的进程的PID,但是使用与
popen
的PHP守护进程,我如何再次检查该脚本是否仍在从PHP脚本运行
我使用Apache,php作为模块
更新:
开始的过程
popen('start /b php process.php', 'r');
在windows中启动后,将启动php.exe进程。如果该进程仍在运行,如何让该进程PID稍后从另一个PHP脚本检查(它运行了数小时)
我读了这篇文章,它应该给出与proc\u get\u status
一起启动的进程的PID,但是使用与popen相同的命令,什么都没有发生
更新:我注意到,使用相同的命令和proc_open,php.exe进程确实会启动,但在启动它的脚本结束后,它会关闭,并且proc_get_status返回的PID与Windows PID不对应。有几种方法可以使用php和Windows安全运行进程: 1.使用WScript.Shell对象启动后台进程 您可以使用内置于Windows的WScript.Shell对象的方法启动进程。通过改变第二个参数,可以使窗口隐藏、可见、最小化等。通过将第三个参数设置为false,Run不会等待进程完成执行。此代码仅适用于Windows。要了解有关COM的更多信息,请阅读 2.使用popen和pclose启动后台进程 这段代码应该可以在Linux和Windows上运行
pclose(popen("start \"bla\" \"" . $exe . "\" " . escapeshellarg($args), "r"));
3.使用psexec启动后台进程
此方法需要安装免费软件:
你可以通过阅读这篇文章来了解更多关于它的信息。我以前用过第一种方法,它一直对我有效
要找到现有流程的PID,我认为您不能使用,因此必须使用
exec('tasklist')代码>。或者,您可以安装并遵循。使用php中的system()
及
使用cmd.exe:
任务列表
如果您有Powershell:
获取过程
没有测试。或者使用winapi调用编写您的小型控制台应用程序我已经知道如何启动进程我需要的是-获取启动进程的PID-知道如何使用PID检查进程是否仍在运行Win32_ps应该可以工作,但我找不到使其与php 5.3一起工作的方法。这个dll是5.2版的,我在这里找到的版本应该可以在6.0及更高版本上工作,但它仍然没有被加载(是的,我把扩展名放在php.ini中)
pclose(popen("start \"bla\" \"" . $exe . "\" " . escapeshellarg($args), "r"));
exec("psexec -d blah.bat");