|
代码如下:/** * 保证单进程 * * @param string $processName 进程名 * @param string $pidFile 进程文件路径 * @return boolean 是否继续执行当前进程 */ function singleProcess($processName,$pidFile) { if (file_exists($pidFile) && $fp = @fopen($pidFile,"rb")) { flock($fp,LOCK_SH); $last_pid = fread($fp,filesize($pidFile)); fclose($fp);
if (!empty($last_pid)) { $command = exec("/bin/ps -p $last_pid -o command=");
if ($command == $processName) { return false; } } }
$cur_pid = posix_getpid();
if ($fp = @fopen($pidFile,"wb")) { fputs($fp,$cur_pid); ftruncate($fp,strlen($cur_pid)); fclose($fp);
return true; } else { return false; } }
/** * 获取当前进程对应的Command * * @return string 命令及其参数 */ function getCurrentCommand() { $pid = posix_getpid(); $command = exec("/bin/ps -p $pid -o command=");
return $command; }
使用方法: 代码如下:if (singleProcess(getCurrentCommand(),'path/to/script.pid')) { // code goes here } else { exit("Sorry,this script file has already been running ...n"); }
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|