当前位置: 首页 > 后端技术 > PHP

守护进程的PHP实现

时间:2023-03-30 00:31:14 PHP

什么是守护进程?守护进程(daemon)是一种生命周期很长的特殊进程。来自终端的信号)。例如:crontab、sshd、nginx等,都会以守护进程的形式运行,以保证始终能够正常提供服务。daemon进程如何实现fork子进程,父进程退出(当前子进程会成为init进程的子进程),子进程调用setsid(),开启新的会话,成为新的会话领导者,并再次释放与终端的关联关系fork子进程,父进程退出(可以防止sessionleader重新申请打开终端)关闭打开的文件描述符更改当前工作目录chdir清除进程的umaskPHP实现/***daemon(守护进程)PHP实现*@authorzhjx922*/$pid=pcntl_fork();if($pid==-1){die('创建子进程失败');}elseif($pid){//第一次退出父进程exit(0);}//setsidposix_setsid();echo"输出成功,离开终端".PHP_EOL;sleep(5);$pid=pcntl_fork();if($pid==-1){die('创建子进程失败');}elseif($pid){//退出父进程for第二次(前一个fork的子进程)exit(0);}echo"canstilloutput"。PHP_EOL;sleep(5);//关闭各种描述符@fclose(STDOUT);@fclose(STDERR);$STDOUT=fopen('/dev/null',"a");$STDERR=fopen('/dev/null',"a");chdir('/');umask(0);echo"这里不会有输出,psaux|grepdaemon.php查看进程,20s后退出".PHP_EOL;睡眠(20);日常使用注意事项phpdaemon.php&像这样使用,终端关闭时,当前php进程也会同时关闭nohupphpdaemon.php>daemon.log&终端关闭后,仍然会继续运行。使用supervisor关注公众号,一起学习成长~