强制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 相关文章推荐
WINXP下apache+php4+mysql
Nov 25 PHP
用PHP生成静态HTML速度快类库
Mar 18 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
PHP中返回引用类型的方法
Apr 03 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
PHP实现的购物车类实例
Jun 17 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
详解PHP版本兼容之openssl调用参数
Jul 25 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 PHP
PHP实现一个限制实例化次数的类示例
Sep 16 PHP
PHP7 错误处理机制修改
Mar 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
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
php自动载入类用法实例分析
2016/06/24 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
checkbox 多选框 联动实现代码
2008/10/22 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
在Python中使用模块的教程
2015/04/27 Python
Python实现简单多线程任务队列
2016/02/27 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
办公室助理岗位职责
2013/12/25 职场文书
通信工程专业毕业生推荐信
2013/12/25 职场文书
低碳环保倡议书
2014/04/14 职场文书
校本培训个人总结
2015/02/28 职场文书
2015年清明节网上祭英烈活动总结
2015/03/26 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript