我有用户提交了服务器运行的 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 上。