强制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使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
Aug 06 PHP
php基于Snoopy解析网页html的方法
Jul 09 PHP
php精确的统计在线人数的方法
Oct 21 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 PHP
PHP实现websocket通信的方法示例
Aug 28 PHP
PHP chr()函数讲解
Feb 11 PHP
Laravel如何同时连接多个数据库详解
Aug 13 PHP
Laravel框架中缓存的使用方法分析
Sep 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
python实现周期方波信号频谱图
2018/07/21 Python
python自动识别文本编码格式代码
2019/12/26 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
django中related_name的用法说明
2020/05/20 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
旅游项目开发策划书
2014/01/18 职场文书
关于运动会的稿件
2014/02/02 职场文书
2014春晚主持词
2014/03/25 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
python接口测试返回数据为字典取值方式
2022/02/12 Python