1、守护进程源码
<?php
/**
* Copyright (C) Iamasb
* @project : 3、workerman相关知识点
* @explain : 守护进程案例
* @filename : 22、守护进程案例.php
* @author : iamasb
*/
umask(0);
$pid = pcntl_fork();
if ($pid < 0) {
echo 'fork error';
exit(0);
}
if ($pid > 0) {
echo "master is exit.";
exit(0);
}
// 设置当前进程为会话组长,摆脱当前终端
if (posix_setsid()<0) {
echo 'set session is error.';
exit(0);
}
// 上述进程为无终端会话组长,再次fork。使子进程无法不再是会话组长
// 当然不需要下面的代码也是可以
$pid = pcntl_fork();
if ($pid < 0) {
echo 'fork error';
exit(0);
}
if ($pid > 0) {
echo "master is exit.";
exit(0);
}
// 重定向输出、错误输出
// 当不进行设置输出重定向,则关闭当前终端时,echo会有未知错误发生,导致file_put_contents无法正常运行
fclose(STDOUT);
fclose(STDERR);
$stdout = fopen('out.txt','a+');
$stderr = fopen('error.txt','a+');
for ($i=1;$i<=20;$i++) {
echo $i,PHP_EOL;
file_put_contents('demo.txt',
$i . "--" . "\n", FILE_APPEND);
sleep(5);
}
2、执行结果
注意事项: 由于是守护进程,脚本在终端运行后,就脱离终端。因此如要关闭守护进程。只能通过ps查找守护进程id,然后再进行kill
声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者iamasb所有,原文出处。若您的权利被侵害,请联系删除。
本文标题:(php经典实例)(php 实例)
本文链接:https://www.51qsb.cn/article/dvjqsq.html