当前位置:首页 > PHP教程 > php高级应用 > 列表

强制PHP命令行脚本单进程运行的方法

发布:smiling 来源: PHP粉丝网  添加日期:2020-11-15 19:57:50 浏览: 评论:0 

本文介绍了一个强制PHP在单进程中执行的函数,多用在php命令行中和一些特殊需求的地方,需要的朋友可以参考下,代码如下:

  1. /** 
  2.  * 保证单进程 
  3.  * 
  4.  * @param string $processName 进程名 
  5.  * @param string $pidFile 进程文件路径 
  6.  * @return boolean 是否继续执行当前进程 
  7.  */ 
  8. function singleProcess($processName$pidFile
  9.  if (file_exists($pidFile) && $fp = @fopen($pidFile,"rb")) 
  10.  { 
  11.   flock($fp, LOCK_SH); 
  12.   $last_pid = fread($fpfilesize($pidFile)); 
  13.   fclose($fp); 
  14.  
  15.   if (!emptyempty($last_pid)) 
  16.   { 
  17.    $command = exec("/bin/ps -p $last_pid -o command="); 
  18.  
  19.    if ($command == $processName
  20.    { 
  21.     return false; 
  22.    } 
  23.   } 
  24.  } 
  25.  
  26.  $cur_pid = posix_getpid(); 
  27.  
  28.  if ($fp = @fopen($pidFile"wb")) 
  29.  { 
  30.   fputs($fp$cur_pid); 
  31.   ftruncate($fpstrlen($cur_pid)); 
  32.   fclose($fp); 
  33.  
  34.   return true; 
  35.  } 
  36.  else 
  37.  { 
  38.   return false; 
  39.  } 
  40.  
  41. /** 
  42.  * 获取当前进程对应的Command 
  43.  * 
  44.  * @return string 命令及其参数 
  45.  */ 
  46. function getCurrentCommand() 
  47.  $pid     = posix_getpid(); 
  48.  $command = exec("/bin/ps -p $pid -o command="); 
  49.  
  50.  return $command

使用方法:

  1. if (singleProcess(getCurrentCommand(), 'path/to/script.pid')) 
  2.     // code goes here 
  3. else 
  4.  exit("Sorry, this script file has already been running ...\n"); 

Tags: PHP命令行 PHP单进程

分享到: