Daemon进程与日志输出

Daemon进程与日志输出,第1张

前几日,遇到一个问题,需要收集在容器迹搏里一个 daemon 进程的输出日志。一般来说,容器里的进程只需要打日志到标准输出就可以了,桐州敬但 daemon 进程比较特殊,daemon 进程没有控制终端,也没有继承相应的文件描述符。

上述问题可以转化为一个通用的问题:如何让一个 daemon 进程输出日志到当前的控制台上?

另外,supervisor 及 docker 在启动的时候,是不允许启动后台进程的,这是为什么呢?

在解答之前,先来看一些相关的基础知识。

查看一个进程的 pid,gpid,spid,command

上述命令打印 32036 号进程,父进程为 1098,进程组号为 32036,会话号为 32036。

打印前台进程组的进程信息。

查看进程树。

上面的程序实现了一个简单的 daemonize 例程。有以下一些地方还没有考虑到:

写一个简单的 shell 程序进行测试:

编译运行,注意现在的工作路径为 /,可执行局慎程序要写绝对路径。

查看进程:

可以看到 daemon 进程 pid 为 30467, 其父进程为 init 进程,组长为 30466,为会话首进程,session id 也是 30466。

可以 tailf test.log 查看日志输出。

配置redis作为守护进程运行

# 默认情况下 redis 不是作为守护进程运行的没纳,如果你想让它在后台运行,没察正你就把配置文件里

daemonize

改成 yes。

# 当redis作为守护进程运行的时候枯悔,它会写一个 pid 到 /var/run/redis.pid 文件里面。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/8191637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存