强制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控制网页过期时间的代码
Sep 28 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
php中通过curl模拟登陆discuz论坛的实现代码
Feb 16 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
May 10 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
PHP+MySql实现一个简单的留言板
Jul 19 PHP
PHP控制循环操作的时间
Apr 01 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使用exec shell命令注入的方法讲解
2013/11/12 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
javascript 获取表单file全路径
2009/12/31 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
全面了解JS中的匿名函数
2016/06/29 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
js实现一个简易计算器
2020/03/30 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
vuex实现购物车功能
2020/06/28 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
在django view中给form传入参数的例子
2019/07/19 Python
python 实现识别图片上的数字
2019/07/30 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
Python2与Python3的区别点整理
2019/12/12 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
求职自荐信怎么写
2014/03/06 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书