/*

* 同一个PHP进程只运行一次,根据进程名字判断是否为排重进程,只能运行于linux,高并发条件下是并发安全的。

*/

class SyncProcess {

private $pidFile;

function __construct($pidFile) {

$this->pidFile = $pidFile;

}

/**

* 非阻塞方式返回进程是否正在运行

*/

function check() {

if (PHP_OS == 'Linux') {

$pidFile = $this->pidFile;

if (!empty($pidFile)) {

$flag = false;

$pidDir = dirname($pidFile);

if (is_dir($pidDir)) {

$flag = true;

}

if ($flag) {

$running = true;

clearstatcache(true, $this->pidFile);

if (!file_exists($this->pidFile))

file_put_contents($this->pidFile, '', LOCK_EX);

$f = fopen($this->pidFile, 'r+');

if (flock($f, LOCK_EX ^ LOCK_NB)) {

$pid = trim(fgets($f));

if (!$this->is_process_running($pid)) {

$running = false;

}

}

if (!$running) {

fseek($f, 0);

ftruncate($f, 0);

fwrite($f, getmypid());

}

flock($f, LOCK_UN);

fclose($f);

return $running;

} else {

debug_print("pid file($pidFile) is invalid", E_USER_WARNING);

}

} else {

debug_print("pid file cant't be empty", E_USER_WARNING);

}

} else {

debug_print(__CLASS__ . ' can only run in Linux', E_USER_WARNING);

return true;

}

}

/**

* 如果正在运行或者发生未知错误返回true,如果没有运行返回false

* @param mixed $pid

*/

private function is_process_running($pid) {

if (is_numeric($pid) && $pid > 0) {

$output = array();

$line = exec("ps -o pid --no-headers -p $pid", $output);

//返回值有空格

$line = trim($line);

if ($line == $pid) {

return true;

} else {

if (empty($output)) {

return false;

} else {

if (php_sapi_name() == 'cli')

$n = "\n";

else

$n = "
";

//到这一步的话应该是出什么问题了

$output = implode($n, $output);

debug_print($output, E_USER_WARNING);

return true;

}

}

}else {

return false;

}

}

}

php 同步代码,PHP进程同步代码实例相关推荐

  1. php 同步代码,PHP进程同步代码实例_PHP

    经常遇到这样一种情况,计划任务定时后台执行某个php程序,有时候也需要手动执行,可能多个人都需要执行这个程序,如果任务持续时间非常长,就很容易造成重复执行,所以就开发了下面的类. 作用:在实际代码运行 ...

  2. java 代码块(局部代码块、实例代码块、静态代码块、同步代码块)

    1 引言 代码块是类的成分之一:成员变量,方法,构造器,代码块,内部类. 在Java中,使用 { } 括起来的代码被称为代码块(Code block) 1.1 代码块的分类 根据其位置和声明的不同,可 ...

  3. 全网详细介绍百度低代码框架amis及实例讲解

    文章目录 1. 文章引言 2. amis官网 3. amis介绍 3.1 amis的简述 3.2 amis的初衷 3.3 amis的其他亮点 3.4 amis不适之处 4. amis使用 4.1 am ...

  4. 用python将xml文件转换为txt文件_python代码xml转txt实例

    为了训练深度学习模型,经常要整理大量的标注数据,需统一不同格式的标注数据,一般情况下习惯读取TXT格式的数据.但实际中经常遇到XML格式的标注数据,在此举例:1.读取XML标注数据:2.写入TXT文件 ...

  5. php100例代码教程,php实例代码_php用户登录实例教程代码

    摘要 腾兴网为您分享:php用户登录实例教程代码,音恋,小米云盘,武魂传说,万步有约等软件知识,以及绿城党旗红,一席app,一亩田app,窝立方,fairuse4wm,超星阅读,大连农商银行,qq名片 ...

  6. 【教程】nrf51822实例代码解析及修改实例

    [教程]nrf51822实例代码解析及修改实例 http://www.eeboard.com/bbs/thread-42757-1-1.html 说在前面:此说明用于nrf51822的主从机的实例代码 ...

  7. 同步代码和异步代码_告别异步代码

    同步代码和异步代码 Quasar是一个将真正的轻量级线程(纤维)添加到JVM的库. 它们非常便宜且非常快-实际上,光纤的行为就像Erlang进程或Go goroutines-并允许您编写简单的阻塞代码 ...

  8. SharePoint无代码工作流设计开发实例——交通费报销流程(一)

    开发环境: (1)SharePoint Designer 2010 (2)SharePoint Online(Office 365) 关于Office 365和SharePoint Online的相关 ...

  9. python代码大全中文注释_零基础小白必看篇:Python代码注释规范代码实例解析操作(收藏)...

    本文内容主要介绍了Python代码注释规范代码实例解析,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! 一.代码注释介绍 注释就是对代码的解释和说明 ...

最新文章

  1. 写文件 —— 将内容按照指定格式写入配置文件(fprintf()函数-》》本机的监听地址列表中port值)
  2. 移动前端开发之viewport,devicePixelRatio的深入理解
  3. react性能优化方案_React灵敏且性能卓越的Spray + Akka解决方案,以“在Java和Node.js中发挥并发性和性能”...
  4. 单链表逆序的多种方式
  5. bzoj2208 [Jsoi2010]连通数
  6. java format 补足空格_11 个简单的 Java 性能调优技巧
  7. MapReduce中一次reduce方法的调用中key的值不断变化分析及源码解析
  8. 超强OCR文字识别软件 图像文字识别软件工具-独有直接屏幕截图识别功能
  9. 极域电子教室解除控制
  10. 思维导图软件哪个好?不要错过这份思维导图软件合集
  11. PFC离散元仿真核心技术与应用
  12. python+ UIAutomator2+WEditor环境安装详情教学以及案例
  13. waves服务器系统盘,Waves Soundgrid服务器(DIY)
  14. 约束布局ConstraintLayout ,报错:This view is not constrained vertically
  15. 免费pdf转word网页版
  16. Uva815 Flooded
  17. python语言编写从一加到100_python学习: 如何循序渐进学习Python语言
  18. android学习笔记之GoogleMap 【转】
  19. Nyoj 954 N!
  20. web服务器没有对应站点,原因:您的请求在Web服务器中没有找到对应的站点的解决方法...

热门文章

  1. Win7安装64位CentOS 6.4双系统详细过程
  2. 【Linux】29.扫描本机同一局域网内 某端口开启 的主机
  3. 训练深度神经网络的时候需要注意的一些小技巧
  4. 「消息队列」看过来!
  5. 史上最全的Chrome使用技巧集锦
  6. IDEA代码生成插件CodeMaker
  7. ER图,数据建模与数据字典
  8. Hadoop For Windows
  9. 程序员面试题精选100题(62)-C/C++/C#面试题(5)
  10. Ubuntu在当前目录下右键直接打开terminal终端