运行PHP“;exec();在Windows的后台?
我创建了一个脚本,它使用psexec调用另一个脚本,该脚本调用psexec来运行我的命令行程序 对psexec和其他脚本调用如此之多的原因仅仅是为了让我的PHP脚本不必等待进程完成,然后再将其输出到浏览器 有没有一种不需要使用psexec就可以做到这一点的方法?我与psexec有问题,所以我想从我的程序中完全删除它 我正在运行Windows 2008运行PHP“;exec();在Windows的后台?,php,windows,Php,Windows,我创建了一个脚本,它使用psexec调用另一个脚本,该脚本调用psexec来运行我的命令行程序 对psexec和其他脚本调用如此之多的原因仅仅是为了让我的PHP脚本不必等待进程完成,然后再将其输出到浏览器 有没有一种不需要使用psexec就可以做到这一点的方法?我与psexec有问题,所以我想从我的程序中完全删除它 我正在运行Windows 2008 编辑:我更改了标题,我想这将是一个更准确的标题。我发现如果一个程序是用这个函数启动的,为了让它在后台继续运行,程序的输出必须重定向到一个文件或另一
编辑:我更改了标题,我想这将是一个更准确的标题。我发现
如果一个程序是用这个函数启动的,为了让它在后台继续运行,程序的输出必须重定向到一个文件或另一个输出流。否则将导致PHP挂起,直到程序执行结束。
在PHP.net的页面上的exec()
,但不确定如何执行。尝试Windows的启动
命令:在命令行中包括重定向:
exec('program.exe > NUL')
或者您可以修改您的程序以显式关闭标准输出,在C语言中,这将是
CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE));
您可能需要重定向/关闭标准输出和标准错误:
exec('program.exe > NUL 2> NUL')
或
这对我有用
$command = 'start /B program.exe > NUL';
pclose( popen( $command, 'r' ) );
有关更多信息:
你到底想做什么?只是好奇,因为除了使用后台脚本,我不确定是否有其他方法可以实现……如果我尝试从
exec()
使用start
,我是否还需要等待该过程完成,然后PHP脚本才能完成?@Rob哦,对不起,我尝试了,你完全正确。真奇怪。我真的认为它是独立启动的。如果在windows上使用popen('start command','r'),那么它就不会等待命令完成。几天前才发现,像这里?示例#2 popen()示例
,这就是您所说的??
$command = 'start /B program.exe > NUL';
pclose( popen( $command, 'r' ) );