一尘不染

php执行后台进程

php

我需要在用户操作时执行目录副本,但是目录很大,因此我希望能够执行这样的操作,而用户却不知道完成副本所花费的时间。

任何建议将不胜感激。


阅读 328

收藏
2020-05-26

共1个答案

一尘不染

假设它在Linux机器上运行,我总是这样处理:

exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));

这将启动命令$cmd,将命令输出重定向到$outputfile,并将进程ID写入$pidfile

这样一来,您可以轻松地监视该进程在做什么以及它是否仍在运行。

function isRunning($pid){
    try{
        $result = shell_exec(sprintf("ps %d", $pid));
        if( count(preg_split("/\n/", $result)) > 2){
            return true;
        }
    }catch(Exception $e){}

    return false;
}
2020-05-26