强制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实现维护文件代码
Jun 14 PHP
php连接Access数据库错误及解决方法
Jun 20 PHP
php顺序查找和二分查找示例
Mar 27 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
PHP常用处理静态操作类
Apr 03 PHP
golang与php实现计算两个经纬度之间距离的方法
Jul 22 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 PHP
PHP sdk实现在线打包代码示例
Dec 09 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中strtotime函数用法详解
2014/11/15 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
jquery获取节点名称
2015/04/26 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
python numpy数组的索引和切片的操作方法
2018/10/20 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Python将string转换到float的实例方法
2019/07/29 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
服装电子商务创业计划书
2014/01/30 职场文书
信息技术培训感言
2014/03/06 职场文书
可口可乐广告词
2014/03/20 职场文书
学校食堂标语
2014/10/06 职场文书
离婚起诉状范本
2015/05/19 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
校园安全学习心得体会
2016/01/18 职场文书
解析python中的jsonpath 提取器
2022/01/18 Python