强制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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
PHP中array_slice函数用法实例详解
Nov 25 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
PHP合并discuz用户脚本的方法
Aug 04 PHP
PHP实现获取文件后缀名的几种常用方法
Aug 08 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
Sep 28 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 PHP
php多进程应用场景实例详解
Jul 22 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 PHP
PHP number_format函数原理及实例解析
Jul 14 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
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
禁止js文件缓存的代码
2010/04/09 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python AES加密模块用法分析
2017/05/22 Python
python对象与json相互转换的方法
2019/05/07 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
经典c++面试题二
2015/08/14 面试题
学年自我鉴定范文
2013/10/01 职场文书
施工安全标语
2014/06/07 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS