强制PHP命令行脚本单进程运行的方法
本文介绍了一个强制PHP在单进程中执行的函数,多用在php命令行中和一些特殊需求的地方,需要的朋友可以参考下,代码如下:
- /**
- * 保证单进程
- *
- * @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 (!emptyempty($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");
- }