发布日期:2018-03-26
PHP执行后台进程+ 查看更多
PHP执行后台进程
+ 查看更多
发布日期:2018-02-24 17:47
分类:PHP
浏览次数:42
我需要让用户能够执行复制一个比较大的目录的操作。请注意,是非常大的目录。所以我需要能够在用户无法察觉到完成复制所消耗的时间的前提下执行这项操作(又或者说,不能让用户等待)。
无论得到什么建议,我都会十分感谢。
无论得到什么建议,我都会十分感谢。
回答
exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
假设这个操作是在一台Linux机器上运行的,我总是会这样处理它:
这条语句发起一条指令$cmd,将指令输出重定向到$outputfile,并将进程号写入$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; }