Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查PHP脚本是否正在运行?_Php_Daemon - Fatal编程技术网

如何检查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,但是使用与

如果我在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相同的命令,什么都没有发生


更新:我注意到,使用相同的命令和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");