<?php
/**
* daemonize让当前脚本为守护进程执行
* @param string $callback 匿名函数
*/
function daemonize($callback)
{
//创建子进程
$pid = pcntl_fork();
if ($pid < 0)
{
exit('创建子进程失败退出');
}
elseif ($pid)
{
exit('主进程退出');
}
else
{
/**
* 创建一个新的会话,并让这个pid统治这个会话,他既是会话组长,也是进程组长。
* 关机除外,谁也没法控制这个会话,除了这个pid。
* 注意:posix_setsid()函数需要当前进程不是父进程,或者说不是会话组长。
* 在这里当然不是,因为父进程已经被kill
*/
//设置子进程为会话leader
$sid = posix_setsid();
if ($sid < 0)
{
exit('设置子进程为leader失败');
}
$callback();
}
}
//执行任务来测试
$callback = function () {
for ($i=0;$i<10000;$i++)
{
file_put_contents('1.txt',$i.PHP_EOL,FILE_APPEND);
}
};
daemonize($callback);
先让主进程退出,然后设置子进程为会话组长即可。
版权属于:大卫科技Blog
本文链接:https://www.iyuu.cn/archives/345/
转载时须注明出处