如何在 systemd 日志中获得共享标准输出文件描述符的进程的 PID?

如何在 systemd 日志中获得共享标准输出文件描述符的进程的 PID?

当一个进程fork()的子进程没有关闭并重新打开标准 IO,所有子级共享相同的 IO 文件描述符。

默认情况下,在 systemd 单元中运行此类分叉进程将导致任何标准输出按预期写入日志。

在 systemd 241(Debian buster、Linux 4.19)上,这些日志条目有一个_PID与 PID 匹配的字段父母的进程(systemd 启动的进程),无论实际写入 stdout(或 stderr)的进程是什么。

然而...在 systemd 247 (Debian bullseye, Linux 5.9) 上,日志_PID条目与 PID 正确匹配实际写的过程到共享的 stdout 文件描述符。我猜它是通过读取套接字接收逻辑上的一些魔法标志来实现这一点的,这非常棒。

我已读完系统变更日志我无法理解这种变化在什么时候以及如何变化,或者是否只是配置不同。

有没有办法让 buster 附带的 systemd 和 Linux 内核的日志上的 _PID 标签匹配?

答案1

这种情况在什么时候发生了变化以及如何发生变化

在 v243-534-g09d0b46ab6:“日志:刷新标准输出流的缓存凭据”

有没有办法让_PIDbuster 附带的systemd 和Linux 内核的日志上有匹配的标签?

您可以尝试应用该更改并重建。

相关内容