守护进程(daemon)是一种特殊的进程,它的生命周期很长,它在后台运行并且没有控制终端(这样可以保证守护进程不会接收到各种来自终端的信号)。
比如:crontab、sshd、nginx等,都会使用守护进程的形式运行,确保可以一直正常的提供服务。
/**
* daemon(守护进程) PHP实现
* @author zhjx922
*/
$pid = pcntl_fork();
if ($pid == -1) {
die('创建子进程失败');
} else if ($pid) {
//第一次退出父进程
exit(0);
}
//setsid
posix_setsid();
echo "成功输出,脱离终端" . PHP_EOL;
sleep(5);
$pid = pcntl_fork();
if ($pid == -1) {
die('创建子进程失败');
} else if ($pid) {
//第二次退出父进程(之前fork出来的子进程)
exit(0);
}
echo "依然可以输出" . PHP_EOL;
sleep(5);
//关闭各种描述符
@fclose(STDOUT);
@fclose(STDERR);
$STDOUT = fopen('/dev/null', "a");
$STDERR = fopen('/dev/null', "a");
chdir('/');
umask(0);
echo "这里不会输出, ps aux | grep daemon.php 查看进程,20s后退出" . PHP_EOL;
sleep(20);| 留言与评论(共有 0 条评论) “” |