php 守护进程(Daemon)
守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。
很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。
守护进程一直在后台运行,脱离终端运行的程序 独立运行的守护进程
<?php
class myProcess
{
const UID = 80;
const GID = 80;
protected $loop = true;
protected $pidFile = "/tmp/myprocess.pid";
//protected $data = "123132132\r\n"; private function checkPidFile()
{
if(file_exists($this->pidFile))
{
echo "daemon process is already runing.\n";
exit();
}
}
private function daemon()
{ $pid = pcntl_fork();
if ($pid == -1)
{
exit("fork fail");
}else if($pid == 0){
$this->handler();
}else{
exit();
}
} private function handler()
{
posix_setsid();
posix_setuid(self::UID);
posix_setgid(self::GID);
#fclose(STDIN);
#fclose(STDOUT);
#fclose(STDERR);
#$pid = posix_getpid
$pid = getmypid();
file_put_contents($this->pidFile, $pid); #or die("open file fail");
} private function start()
{
pcntl_signal_dispatch();
$this->checkPidFile();
$this->daemon();
while ($this->loop) {
$id = getmypid();
//$f = fopen("/tmp/a.txt",a);
//fwrite($f,$this->data);
//file_put_contents("/tmp/".$id.".log","进程ID:$id 正常运行\r\n");
sleep(1);
}
} private function stop()
{
if (file_exists($this->pidFile)) {
$pid = file_get_contents($this->pidFile);
posix_kill($pid, SIGHUP);
unlink($this->pidFile);
echo "stop success.....";
}else{
echo "stop fail, daemon process not is already runing";
}
} private function restart()
{
$this->stop();
$this->start();
} public function reload()
{
// $this->loop = false;
// pcntl_signal_dispatch();
// $this->loop = true;
// $this->start();
} public function main($argv)
{
switch ($argv[1]) {
case 'start':
$this->start();
break;
case 'stop':
$this->stop();
break;
case 'restart':
$this->restart();
break;
case 'reload':
$this->reload();
break;
default:
echo 'php process.php start | stop | restart | reload';
exit;
}
} } $proce = new myProcess();
$proce->main($argv);
php 守护进程(Daemon)的更多相关文章
- python 守护进程 daemon
python 守护进程 daemon # -*-coding:utf-8-*- import sys, os '''将当前进程fork为一个守护进程 注意:如果你的守护进程是由inetd启动的,不要这 ...
- linux 守护进程 daemon
Linux的Service/Daemon你真的懂了吗? Linux 守护进程的启动方法 linux系统编程之进程(八):守护进程详解及创建,daemon()使用 linux守护进程 daemon 详解
- linux下的守护进程daemon
什么是守护进程?其实感觉守护进程并没有什么明确的定义,只是守护进程有一些特征,这是它需要遵循的. 守护进程的第一个特征是长时间在后台运行的程序,并且主要是为了提供某种服务,而为了能够让服务尽可能随时都 ...
- Linux守护进程daemon
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启 ...
- .NET跨平台实践:用C#开发Linux守护进程-Daemon
Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...
- linux 守护进程(daemon process)代码-详细注释
1. 进程组 组长不能创建新的 会话. 其它进程可以创建新的会话,创建后既成为会话首领,同时失去控制终端. 2. 会话首领可以重新打开控制终端 1 #include <stdio.h> 2 ...
- python学习笔记——线程threading (二)重写run()方法和守护进程daemon()
1 run()方法 1.1 单个线程 在threading.Thread()类中有run()方法. from time import ctime,sleep import threading # 定义 ...
- Mac系统的launchd、守护进程daemon(2013笔记整理)
1. launchd Mac系统下通用的进程管理器,是Mac系统下非常重要的一个进程,一般来说该进程不允许直接以命令行的形式调用.只能通过其控制管理界面,launchctl来进行控制. launchd ...
- flask使用debug模式时,存在错误时,会占用设备内存直至服务重启才释放;debug模式会开启一个守护进程(daemon process)
函数调用顺序flask的app.py的run-->werkzeug的serving.py的run_simple-->调用werkzeug的debug的__init__.py里的类Debug ...
- 守护进程daemon.c
它的特点是:•不占用控制终端(后台运行)•独立于控制终端•周期性运行 #include<stdio.h>#include<unistd.h>#include<fcntl. ...
随机推荐
- oracle Extract 函数
//oracle中extract()函数从oracle 9i中引入,用于从一个date或者interval类型中截取到特定的部分 //语法如下: EXTRACT ( { Y ...
- Web 应用程序项目 Himall.Web 已配置为使用 IIS。 无法访问 IIS 元数据库
Web应用程序项目XXXX已配置为使用IIS.无法访问IIS元数据库.您没有足够的特权访问计算机上的IIS网站,xxxxiis 问题:Windows8下直接使用VS打开项目,出现问题:XXXX已配置为 ...
- 解决wxParse空格不解析的问题
遇到的问题: 相似问题:https://blog.csdn.net/qq_41619741/article/details/85774865 http://html51.com/info-41786- ...
- java实现字符串和LIST,MAP转换
需要下载第三方的jar :net.sf.json import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- gentoo virtual couldnt download
今天在更新系统的时候,提示 virtualbox-bin 从原始地址下载不了,经过一番摸索,通过下面的方式即可正常安装. http://download.virtualbox.org/virtualb ...
- Springboot整合druid
目录 Springboot整合druid application.yml DruidConfig 数据监控地址:http://localhost:8080/druid Springboot整合drui ...
- 13Linux_vsftpd_Samba_NFS实现文件共享_TFTP
vsftpd服务程序: 匿名开放模式 本地用户模式 虚拟用户模式 简单文件传输协议 TFTP:UDP协议,端口69 TFTP服务使用xinetd服务程序来管理. Samba文件共享服务 NFS网络文件 ...
- iOS Simulator version 11 or later is currently not supported.
iOS Simulator version 11 or later is currently not supported.You can open Xcode > Preferences > ...
- python中线程2
cpython中的GIL和pool GIL锁(全局解释器锁) 1.what? GIL是全局解释器锁,和普通锁加在数据上不同的是:GIL加在加在解释器上,是为了防止多个线程在同一时间执行python字节 ...
- Haskell语言学习笔记(93)Data.Text
Data.Text.Read Prelude> :set -XOverloadedStrings Prelude> :m +Data.Text.Read Prelude Data.Text ...