Php 在windows下检测正在运行的进程(如果未运行则启动)

Php 在windows下检测正在运行的进程(如果未运行则启动),php,Php,下面是我用来检查进程是否在windows下运行的代码,在本例中是calc.exe 如果任务列表中找不到calc.exe,我将尝试启动它 若calc.exe未启动,则在运行php脚本时打开,但页面保持循环,直到我关闭calc.exe 我错在哪里 谢谢你的帮助 // START SHOW TASKLIST // Get Tasklist exec("tasklist 2>NUL", $task_list); //print_r($task_list); echo '<pre>';

下面是我用来检查进程是否在windows下运行的代码,在本例中是calc.exe

如果任务列表中找不到calc.exe,我将尝试启动它

若calc.exe未启动,则在运行php脚本时打开,但页面保持循环,直到我关闭calc.exe

我错在哪里

谢谢你的帮助

// START SHOW TASKLIST
// Get Tasklist
exec("tasklist 2>NUL", $task_list);

//print_r($task_list);
echo '<pre>'; print_r($task_list); echo '</pre>';
// END SHOW TASKLIST


// Service running
$kill_pattern = '~(calc)\.exe~i';

// Create array
$task_list = array();

exec("tasklist 2>NUL", $task_list);

foreach ($task_list AS $task_line) {
  if (preg_match($kill_pattern, $task_line, $out)) {
    echo "=> Detected: ".$out[1]."\n   !\n";
    $is_running = '1';  
    break; 
  }
}

if ($is_running == '1') {
  echo 'Nothing to do';
  exit; 
} else {
  // open calc.exe
  exec("calc.exe");
  exit;
}
//开始显示任务列表
//获取任务列表
exec(“任务列表2>NUL”,$task_list);
//打印(任务列表);
回声';打印(任务列表);回声';
//结束显示任务列表
//服务运行
$kill\u pattern='~(calc)\.exe~i';
//创建数组
$task_list=array();
exec(“任务列表2>NUL”,$task_list);
foreach($task\列为$task\行){
if(预匹配($kill\u模式,$task\u行,$out)){
回波“=>检测到:“..out[1]”\n!\n”;
$is_running='1';
打破
}
}
如果($is_running=='1'){
呼应“无事可做”;
出口
}否则{
//打开calc.exe
exec(“calc.exe”);
出口
}

请使用此代码避免脚本挂起

改变

pclose(popen('start /B cmd /C "calc.exe >NUL 2>NUL"', 'r'));


那么你的问题是什么?你读过这部分吗页面保持在循环中,直到我关闭calc.exe。我错在哪里?嗯。也许你想保留“页面”(不管是什么),或者你也不想保留它?我们不知道您是否保留了vague.PHP通常在web服务器环境中执行的内容。在这种情况下,让它打开另一个以交互方式工作的流程(“我关闭…”)毫无意义。那么你的情况是什么,你不觉得你应该在问题中具体说明吗?我们猜不到它…清楚地说:如果一个程序是用这个函数启动的,为了让它在后台继续运行,程序的输出必须重定向到一个文件或另一个输出流。否则会导致PHP挂起,直到程序执行结束。效果很好。谢天谢地
pclose(popen('start /B cmd /C "calc.exe >NUL 2>NUL"', 'r'));