Posted in PHP onApril 15, 2014
/** * 保证单进程 * * @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"); }
强制PHP命令行脚本单进程运行的方法
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@