我敢肯定,类似的问题已经被一遍又一遍地回答了。如果是,那么我在错误的方向上搜索并为此道歉。
我的问题:我正在编写一个在后台运行的进程的网页。我正在谈论的过程是一个 R 脚本,运行时间很长,可能需要几天。当进度开始时,它就这样开始了。
exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
我想跟踪进程是否仍在运行。这样,当用户检查时,他会收到有关它已完成或未完成的消息。当用户在再次登录或在页面上执行其他操作之后选择他上传到服务器的输入文件时,跟踪开始和停止。我还希望它在进程完成时更新页面,以便页面发生变化,以防他只是看着它。
我有两种可能。我可以通过进程 ID 或是否生成输出文件来检查它。
我试过了
while(is_process_running($ps)){
ob_flush();
flush();
sleep(1);
}
这有点像,除了页面上的所有其他功能冻结。那是我的 is_process_running($ps) 函数。
function is_process_running($PID){
exec("ps $PID", $ProcessState);
return(count($ProcessState) >= 2);
}
我真正需要的是在后台运行的另一个进程检查第一个进程是否仍在运行,如果没有,则在第一个进程完成时刷新页面。你会怎么做?如果您需要更多信息,请告诉我。非常感谢所有帮助。