强制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 09 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
PHP内核探索:变量概述
Jan 30 PHP
php 伪造ip以及url来路信息方法汇总
Nov 25 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
Oct 10 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
自制PHP框架之路由与控制器
May 07 PHP
Yii框架的路由配置方法分析
Sep 09 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 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生成缩略图的函数代码(修改版)
2011/01/18 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
python实现xml转json文件的示例代码
2020/12/30 Python
会计专业个人自我鉴定
2014/03/21 职场文书
2014春晚主持词
2014/03/25 职场文书
初中班主任寄语
2014/04/04 职场文书
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
影视后期实训报告
2014/11/05 职场文书
五年级学生期末评语
2014/12/26 职场文书
Redis中一个String类型引发的惨案
2021/07/25 Redis