守护进程因echo挂掉的原因,以及重定向标准输入、标准输出和标准错误

我自己的理解:

守护进程必然是要脱离终端的,而echo需要有标准输出,如果守护进程关闭了标准输出,或者关闭了终端,却没有重定向标准输出,那么,此时,在进程里进行echo,就会找不到标准输出而挂掉。

在php cli 的守护进程中,重定向标准输入,标准输出和标准错误。

1 fclose(STDIN);
2 fclose(STDOUT);
3 fclose(STDERR);
4 
5 global $STDIN,$STDOUT, $STDERR;
6 $STDIN   = fopen("/dev/null","r");
7 $STDOUT  = fopen("/var/log/stdout.log","wb");
8 $STDERR  = fopen("/var/log/stderr.log","wb");

在类似Unix的系统中,如果关闭了标准输出,标准错误输出文件描述符,那么重新打开的前三个文件描述符(相同顺序)将成为新的标准输入、输出、错误的描述符。

其中,变量设置成全局变量,避免在其它地方被释放掉。

来源:https://stackoverflow.com/questions/6472102/redirecting-i-o-in-php

posted @ 2021-03-30 17:23  唉唉唉唉  阅读(205)  评论(0编辑  收藏  举报