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


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 相关文章推荐
用PHP连接Oracle for NT 远程数据库
Oct 09 PHP
初次接触php抽象工厂模式(Elgg)
Mar 21 PHP
php 数组使用详解 推荐
Jun 02 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
php操作xml入门之cdata区段
Jan 23 PHP
php中file_exists函数使用详解
May 08 PHP
php生成图片验证码
Jun 09 PHP
基于PHP实现假装商品限时抢购繁忙的效果
Oct 16 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
laravel withCount 统计关联数量的方法
Oct 10 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
May 02 PHP
用PHP和Shell写Hadoop的MapReduce程序
Apr 15 #PHP
php获取mysql字段名称和其它信息的例子
Apr 14 #PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 #PHP
PHP删除数组中空值的方法介绍
Apr 14 #PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
Apr 14 #PHP
thinkphp实现数组分页示例
Apr 13 #PHP
不使用php api函数实现数组的交换排序示例
Apr 13 #PHP
You might like
比较详细PHP生成静态页面教程
2012/01/10 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
thinkphp分页实现效果
2016/10/13 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
JavaScript实现禁止后退的方法
2006/12/27 Javascript
js兼容标准的表格变色效果
2008/06/28 Javascript
javascript 页面划词搜索JS
2009/09/28 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
javascript实现留言板功能
2020/02/08 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
培训主管岗位职责
2014/02/01 职场文书
个人课题方案
2014/05/08 职场文书
文案策划专业自荐信
2014/07/07 职场文书
趣味运动会广播稿
2014/09/13 职场文书
离职感谢信怎么写
2015/01/22 职场文书
2015年世界卫生日活动总结
2015/02/09 职场文书