php 同步代码,PHP进程同步代码实例
/*
* 同一个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进程同步代码实例相关推荐
- php 同步代码,PHP进程同步代码实例_PHP
经常遇到这样一种情况,计划任务定时后台执行某个php程序,有时候也需要手动执行,可能多个人都需要执行这个程序,如果任务持续时间非常长,就很容易造成重复执行,所以就开发了下面的类. 作用:在实际代码运行 ...
- java 代码块(局部代码块、实例代码块、静态代码块、同步代码块)
1 引言 代码块是类的成分之一:成员变量,方法,构造器,代码块,内部类. 在Java中,使用 { } 括起来的代码被称为代码块(Code block) 1.1 代码块的分类 根据其位置和声明的不同,可 ...
- 全网详细介绍百度低代码框架amis及实例讲解
文章目录 1. 文章引言 2. amis官网 3. amis介绍 3.1 amis的简述 3.2 amis的初衷 3.3 amis的其他亮点 3.4 amis不适之处 4. amis使用 4.1 am ...
- 用python将xml文件转换为txt文件_python代码xml转txt实例
为了训练深度学习模型,经常要整理大量的标注数据,需统一不同格式的标注数据,一般情况下习惯读取TXT格式的数据.但实际中经常遇到XML格式的标注数据,在此举例:1.读取XML标注数据:2.写入TXT文件 ...
- php100例代码教程,php实例代码_php用户登录实例教程代码
摘要 腾兴网为您分享:php用户登录实例教程代码,音恋,小米云盘,武魂传说,万步有约等软件知识,以及绿城党旗红,一席app,一亩田app,窝立方,fairuse4wm,超星阅读,大连农商银行,qq名片 ...
- 【教程】nrf51822实例代码解析及修改实例
[教程]nrf51822实例代码解析及修改实例 http://www.eeboard.com/bbs/thread-42757-1-1.html 说在前面:此说明用于nrf51822的主从机的实例代码 ...
- 同步代码和异步代码_告别异步代码
同步代码和异步代码 Quasar是一个将真正的轻量级线程(纤维)添加到JVM的库. 它们非常便宜且非常快-实际上,光纤的行为就像Erlang进程或Go goroutines-并允许您编写简单的阻塞代码 ...
- SharePoint无代码工作流设计开发实例——交通费报销流程(一)
开发环境: (1)SharePoint Designer 2010 (2)SharePoint Online(Office 365) 关于Office 365和SharePoint Online的相关 ...
- python代码大全中文注释_零基础小白必看篇:Python代码注释规范代码实例解析操作(收藏)...
本文内容主要介绍了Python代码注释规范代码实例解析,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!! 一.代码注释介绍 注释就是对代码的解释和说明 ...
最新文章
- 写文件 —— 将内容按照指定格式写入配置文件(fprintf()函数-》》本机的监听地址列表中port值)
- 移动前端开发之viewport,devicePixelRatio的深入理解
- react性能优化方案_React灵敏且性能卓越的Spray + Akka解决方案,以“在Java和Node.js中发挥并发性和性能”...
- 单链表逆序的多种方式
- bzoj2208 [Jsoi2010]连通数
- java format 补足空格_11 个简单的 Java 性能调优技巧
- MapReduce中一次reduce方法的调用中key的值不断变化分析及源码解析
- 超强OCR文字识别软件 图像文字识别软件工具-独有直接屏幕截图识别功能
- 极域电子教室解除控制
- 思维导图软件哪个好?不要错过这份思维导图软件合集
- PFC离散元仿真核心技术与应用
- python+ UIAutomator2+WEditor环境安装详情教学以及案例
- waves服务器系统盘,Waves Soundgrid服务器(DIY)
- 约束布局ConstraintLayout ,报错:This view is not constrained vertically
- 免费pdf转word网页版
- Uva815 Flooded
- python语言编写从一加到100_python学习: 如何循序渐进学习Python语言
- android学习笔记之GoogleMap 【转】
- Nyoj 954 N!
- web服务器没有对应站点,原因:您的请求在Web服务器中没有找到对应的站点的解决方法...