php进程守护

前言

守护进程模型:https://github.com/d2gin/process

笔记

  1. 进程守护原理:父进程fork一个子进程,fork成功后马上退出父进程,那现在的子进程就脱离了命令行的控制。但是对于标准输出流还在,所以你的子进程一旦有输出命令时,命令行中还是会有字符输出的,所以这时候需要将子进程的标准输入输出流重定向到一个控设备中/dev/null,这时候就不会有内容输出到你的控制台中了。

  2. 输出流重定向:使用fclose来关闭文件描述符,分别关闭STDINSTDOUTSTDERR,再使用fopen打开三个文件描述符,就可以替换掉标准输入输出流了。但是需要你将这三个文件资源保存到变量中,并且必须指定为全局变量,否则文件描述符将在函数执行完毕之后被释放。

    <?php
    global $STDIN,$STDOUT,$STDERR;
    fclose(STDIN);
    fclose(STDOUT);
    fclose(STDERR);
    $STDIN = fopen('/dev/null', 'r');
    $STDOUT = fopen('application.log', 'wb');
    $STDERR = fopen('error.log', 'wb');

php进程守护
http://blog.icy8.cn/posts/36952/
作者
icy8
发布于
2022年7月11日
许可协议