守护进程(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大厂PDF面试文档,PHP进阶架构视频资料,PHP精彩好文免费获取可以关注公众号:PHP开源社区,或者访问: