杀死进程打开popen()?

我用popen()打开了一个长期运行的过程。 为了debugging,我想在完成之前终止这个过程。 调用pclose()只是阻塞,直到孩子完成。

我怎样才能死这个进程? 我没有看到任何简单的方法从popen()返回的资源中获取pid,以便我可以发送一个信号。

我想我可以做一些kludgey,并尝试使用某种命令行hackery fudge到输出的pid …

Solutions Collecting From Web of "杀死进程打开popen()?"

那么,降落在一个解决方案:我切换回到proc_open()而不是popen() 。 然后就像这样简单:

 $s = proc_get_status($p); posix_kill($s['pid'], SIGKILL); proc_close($p); 

只需使用kill函数发送kill(或中止)信号:

你可以找到这个pid,然后检查你是否真的是它的父母:

 // Find child processes according to current pid $res = trim(exec('ps -eo pid,ppid |grep "'.getmypid().'" |head -n2 |tail -n1')); if (preg_match('~^(\d+)\s+(\d+)$~', $res, $pid) !== 0 && (int) $pid[2] === getmypid()) { // I'm the parent PID, just send a KILL posix_kill((int) $pid[1], 9); } 

它在fast-cgi PHP服务器上工作得很好。