windows机器上的PHP;在后台启动进程
我正在寻找最好的方法,或者任何真正在后台从php启动进程的方法,以便稍后在脚本中终止它 现在,我正在使用:shell_exec($Command); 问题是它会等待程序关闭 我想要的东西在执行shell命令时与nohup具有相同的效果。这将允许我在后台运行该进程,以便稍后在脚本中关闭它。我需要关闭它,因为此脚本将定期运行,并且运行时程序无法打开 我曾想过生成一个.bat文件,以便在后台运行该命令,但即使如此,以后如何终止该进程 我看到的linux代码是:windows机器上的PHP;在后台启动进程,php,windows,background,kill,nohup,Php,Windows,Background,Kill,Nohup,我正在寻找最好的方法,或者任何真正在后台从php启动进程的方法,以便稍后在脚本中终止它 现在,我正在使用:shell_exec($Command); 问题是它会等待程序关闭 我想要的东西在执行shell命令时与nohup具有相同的效果。这将允许我在后台运行该进程,以便稍后在脚本中关闭它。我需要关闭它,因为此脚本将定期运行,并且运行时程序无法打开 我曾想过生成一个.bat文件,以便在后台运行该命令,但即使如此,以后如何终止该进程 我看到的linux代码是: $PID = shell_exec("n
$PID = shell_exec("nohup $Command > /dev/null & echo $!");
// Later on to kill it
exec("kill -KILL $PID");
编辑:事实证明我不需要终止
exec的php手册中的进程:
如果使用此函数启动程序,为了使其在后台继续运行,程序的输出必须重定向到文件或其他输出流。否则将导致PHP挂起,直到程序执行结束
ie将输出导入文件,php不会等待它:
exec('myprog > output.txt');
从内存来看,我相信有一个控制字符可以预先添加到exec
命令系列中(就像使用@一样),它也可以防止执行暂停,但我不记得是什么
编辑找到了!在unix上,使用&prepend执行的程序将在后台运行。对不起,帮不了你多少忙。这有帮助吗
shell_exec('start/B“C:\Path\to\program.exe”)代码>
/B
参数是这里的关键
我似乎再也找不到我在哪里找到这个了。但这对我来说是可行的。尝试在使用PHP5.2.8的Windows2000服务器上实现同样的效果
没有一个解决方案对我有效。PHP一直在等待响应
发现解决方案是:
$cmd = "E:\PHP_folder_path\php.exe E:\some_folder_path\backgroundProcess.php";
pclose(popen("start /B ". $cmd, "a")); // mode = "a" since I had some logs to edit
在我的Windows 10和Windows Server 2012计算机上,在pclose/popen中可靠工作的唯一解决方案是调用powershell的启动进程命令,如中所示:
pclose(popen('powershell.exe "Start-Process foo.bat -WindowStyle Hidden"','r'));
如果要提供参数并重定向输出,请更详细地执行以下操作:
pclose(popen('powershell.exe "Start-Process foo.bat
-ArgumentList \'bar\',\'bat\'
-WindowStyle Hidden
-RedirectStandardOutput \'.\\console.out\'
-RedirectStandardError \'.\\console.err\'"','r'));
最后,我使用批处理文件并执行以下操作:system(“cmd/c:[文件路径]”);这使脚本继续运行。有没有关于如何终止这个过程的想法?这实际上打开了AdobeReader,在脚本再次运行之前,我仍然需要一种方法来关闭它。我可以让它继续运行。我目前正在windows系统上尝试此操作,它仍在等待脚本在浏览器窗口中结束,而不管它是否正在输出到文件中。有什么想法吗?@WilliamW如果你刷新这个窗口,将会创建一个新的实例,这可能会给我们中的一些人带来问题。我最终使用(几乎)这个来启动批处理文件,现在它工作得很好。很抱歉挖出了这个旧坟墓。我用同样的代码来执行我在C#中编写的外部程序。如果此c#应用程序引发异常,则浏览器/php脚本或apache将挂起。有什么解决办法吗?那么解决方案是什么呢?为了完整起见,我在这里留下了有关start命令的文档链接:
pclose(popen('powershell.exe "Start-Process foo.bat
-ArgumentList \'bar\',\'bat\'
-WindowStyle Hidden
-RedirectStandardOutput \'.\\console.out\'
-RedirectStandardError \'.\\console.err\'"','r'));