强制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 日期时间函数的高级应用技巧
Oct 10 PHP
PHP 中文处理技巧
Apr 25 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php比较相似字符串的方法
Jun 05 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 PHP
PHP开发APP端微信支付功能
Feb 17 PHP
PHP进阶学习之垃圾回收机制详解
Jun 18 PHP
PHP二维数组分页2种实现方法解析
Jul 09 PHP
PHP中->和=>的含义及使用示例解析
Aug 06 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实现选择排序的解决方法
2013/05/04 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
js中的面向对象入门
2017/03/06 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
自己使用总结Python程序代码片段
2015/06/02 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Python内存管理实例分析
2019/07/10 Python
wxpython绘制圆角窗体
2019/11/18 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
利用jupyter网页版本进行python函数查询方式
2020/04/14 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
应届毕业生求职自荐书
2014/01/03 职场文书
共青团员自我评价范文
2014/09/14 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python