2011-08-07 81 views
0

我重写Mark's answer用于Windows和到目前为止,我想出了这一点:执行在PHP后台进程在Windows

// Escape character for Windows is:^
$shellCmd = 'start /B cmd /c ' . escapeshellcmd($cmd) . ' ^>"'.$outputfile. '"'; 
// note that exec was like 40 times slower than popen & pclose 
pclose(popen($shellCmd, "r")); 

有在Windows tasklist命令,但我不知道怎么找取出我的流程的PID。为了准时,我正在寻找通过popen打开的进程的PID。

你能帮我吗? 谢谢!

注意:我不确定这段代码如何处理错误输出,但在我的情况下并不重要。在这些功能

+0

我寻找通过popen打开的进程的PID。 –

+0

你应该添加,作为你的问题的第一句:) – hakre

回答

2

http://php.net/manual/en/function.proc-open.php
http://php.net/manual/en/function.pcntl-fork.php
http://www.php.net/proc_get_status

读讨论,你可以在后台处理更多的控制和检索它们的PID

例子是这样的:

$pcs = popen($shellCmd,"r"); 
$info = proc_get_status($pcs); 
$pid = $info['pid']; 
proc_close($pcs); 
+0

我已经阅读http://www.php.net/manual/en/function.proc-open.php#90584但它不是一种便携式解。 –

+1

http://www.php.net/proc_get_status - 这似乎是我一直在寻找! :) –

+0

是的,添加了代码示例 –