我有用户提交的服务器运行的java文件。由于存在无限循环的可能性,我在PHP中运行超时倒计时。问题是,proc_get_status
似乎在javaw.exe实际完成之前更新(因为它永远不会有无限循环);在第一次迭代之后procStatus["running"] == false
:
$javaCmd = "javaw -cp \"$home/$target_dir\" $fl 2>&1 < ". $fileIn;
$proc = proc_open('exec '.$javaCmd, array(array("pipe", "r"), array("pipe", "w"), array("pipe", "w")), $pipes);
$procStatus = proc_get_status($proc);
if($procStatus["pid"] === false)
{
echo 'PRocess is not running... something is wrong';
}
else
{
if($procStatus["running"] == true)
{
$timeOut = 0;
while($timeOut < $timeLimit)
{
echo 'timeout...'.$timeOut.' while timelimit is '.$timeLimit.'<br/>';
sleep(1);
$timeOut = $timeOut +1;
if( $procStatus["running"] == false)
{
echo 'broke before timeout...<br/>';
break; // Exited before the timeout.
}
$procStatus = proc_get_status($proc);
}
var_dump($procStatus);
}
echo 'killing process<br/>';
var_dump(proc_terminate($proc));
}
我曾尝试在$ proc和$ pipes上执行proc_terminate
,proc_close
,fcloses
,但似乎没有任何工作可以杀死javaw.exe进程。 exec("kill -9 ".$procStatus['pid'])
会成功杀死吗?我在Windows上测试,但服务器在unix上。
答案 0 :(得分:3)
执行exec(“kill -9”。$ procStatus ['pid'])肯定会杀死该进程。 你可以先尝试杀死没有'-9'参数,以便更好地杀死然后 如果进程仍然存在,则再次检查maxbe,' - 9'参数是强制kill。
在Windows下(至少版本7)你可以使用exec(“taskkill / PID”。$ procStatus ['pid']) 对于测试,它应该完全相同。