Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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
windows机器上的PHP;在后台启动进程_Php_Windows_Background_Kill_Nohup - Fatal编程技术网

windows机器上的PHP;在后台启动进程

windows机器上的PHP;在后台启动进程,php,windows,background,kill,nohup,Php,Windows,Background,Kill,Nohup,我正在寻找最好的方法,或者任何真正在后台从php启动进程的方法,以便稍后在脚本中终止它 现在,我正在使用:shell_exec($Command); 问题是它会等待程序关闭 我想要的东西在执行shell命令时与nohup具有相同的效果。这将允许我在后台运行该进程,以便稍后在脚本中关闭它。我需要关闭它,因为此脚本将定期运行,并且运行时程序无法打开 我曾想过生成一个.bat文件,以便在后台运行该命令,但即使如此,以后如何终止该进程 我看到的linux代码是: $PID = shell_exec("n

我正在寻找最好的方法,或者任何真正在后台从php启动进程的方法,以便稍后在脚本中终止它

现在,我正在使用:shell_exec($Command); 问题是它会等待程序关闭

我想要的东西在执行shell命令时与nohup具有相同的效果。这将允许我在后台运行该进程,以便稍后在脚本中关闭它。我需要关闭它,因为此脚本将定期运行,并且运行时程序无法打开

我曾想过生成一个.bat文件,以便在后台运行该命令,但即使如此,以后如何终止该进程

我看到的linux代码是:

$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'));