(php经典实例)(php 实例)

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、执行结果

(php经典实例)(php 实例)

注意事项: 由于是守护进程,脚本在终端运行后,就脱离终端。因此如要关闭守护进程。只能通过ps查找守护进程id,然后再进行kill

声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者iamasb所有,原文出处。若您的权利被侵害,请联系删除。

本文标题:(php经典实例)(php 实例)
本文链接:https://www.51qsb.cn/article/dvjqsq.html

(0)
打赏微信扫一扫微信扫一扫QQ扫一扫QQ扫一扫
上一篇2023-08-16
下一篇2023-08-16

你可能还想知道

发表回复

登录后才能评论