强制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与SQL注入攻击[一]
Apr 17 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
Win下如何安装PHP的APC拓展
Aug 07 PHP
php 检查电子邮件函数(自写)
Jan 16 PHP
取得单条网站评论以数组形式进行输出
Jul 28 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 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 日期加减的类,很不错
2009/10/10 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
es6中let和const的使用方法详解
2020/02/24 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
21行Python代码实现拼写检查器
2016/01/25 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Django中url的反向查询的方法
2018/03/14 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
将python图片转为二进制文本的实例
2019/01/24 Python
Django CBV类的用法详解
2019/07/26 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
Python 防止死锁的方法
2020/07/29 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
销售主管岗位职责范本
2014/02/14 职场文书
教育技术职业规划范文
2014/03/04 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
婚宴来宾致辞
2015/07/28 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
加强党性修养心得体会
2016/01/21 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP