2011-10-07 38 views
2

我创建了一个使用psexec调用另一个脚本的脚本,该脚本调用psexec来运行我的命令行程序。在Windows的后台运行PHP“exec()”?

对psexec和其他脚本进行如此多的调用的原因完全是为了让我的PHP脚本不必等到该过程完成才能输出到浏览器。

有没有办法可以做到这一点,而无需使用psexec?我在使用psexec时遇到了问题,所以我想从程序中彻底删除它。

我运行Windows 2008

编辑:我改变了标题,我想这将是一个更准确的标题。我在012.net的网页上找到If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.exec(),但不知道该怎么做。

+0

究竟是你想做些什么?只是好奇,因为我不知道有一种方法可以脱离使用后台脚本... – espradley

回答

5

包括在命令行重定向:

exec('program.exe > NUL') 

,或者你可以修改你的程序明确地关闭标准输出,在C这将是

CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE)); 

可能(文档没有说)您可能需要重定向/关闭标准输出和d标准错误:

exec('program.exe > NUL 2> NUL') 

CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE)); 
CloseHandle(GetStdHandle(STD_ERROR_HANDLE)); 
2
+0

如果我尝试从'exec()'使用'start',我是否仍然需要等待该进程在PHP脚本完成之前完成? – Rob

+2

@Rob哦,对不起,我试过了,你说的没错。这很奇怪。我真的认为它是独立开始的。 – Boann

+0

没关系,无论如何我都很欣赏这个尝试。谢谢 – Rob