php执行一个后台进程

新手上路,请多包涵

我需要在用户操作时执行目录复制,但是目录非常大,所以我希望能够在用户不知道复制完成所需时间的情况下执行这样的操作。

任何建议将不胜感激。

原文由 tim 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 295
2 个回答

假设这是在 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;
}

原文由 Mark Biek 发布,翻译遵循 CC BY-SA 3.0 许可协议

来自 PHP 官方文档(php.net)

 <?php
function execInBackground($cmd) {
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start /B ". $cmd, "r"));
    }
    else {
        exec($cmd . " > /dev/null &");
    }
}
?>

原文由 Dev Matee 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题