强制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 相关文章推荐
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
Mar 19 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
php跨域cookie共享使用方法
Feb 20 PHP
php中print(),print_r(),echo()的区别详解
Dec 01 PHP
PHP之密码加密的几种方式
Jul 29 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
php中错误处理操作实例分析
Aug 23 PHP
Laravel框架源码解析之反射的使用详解
May 14 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
简单学习vue指令directive
2016/11/03 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
Python理解递归的方法总结
2019/01/28 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
小学五年级学生评语
2014/04/22 职场文书
大学生毕业评语
2014/12/31 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
python中取整数的几种方法
2021/11/07 Python
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技