当守护进程重新设置为 init (Pid 1) 时,原始 PPID 是否存储在任何位置?

当守护进程重新设置为 init (Pid 1) 时,原始 PPID 是否存储在任何位置?

我相当肯定答案是否定的,但我想知道是否有可能在守护进程的守护进程和随后的重新父进程之前破译守护进程的原始父进程。

答案1

答案是特定于操作系统的,但至少在 Linux 上,除非所涉及的进程在某处记录信息,否则没有原始父进程的内存。

Linux 内核确实跟踪两个父进程,但那只是为了ptrace,不跟踪原始父进程。无论如何,当一个进程退出时,它的数据结构会被删除,因此不会有任何信息指向,并且保留原始父进程 pid 最终会产生误导,因为 pid 会被回收。

答案2

不。

你应该自己跟踪它。在 Linux 上,您可以构建一个真实的,使用历史流程树过程连接器,但不幸的是这个功能本身就很活泼。使用 proc_connector 的示例程序是福克斯塔

更好地解释你实际上想要做什么。

有一些简单(但不太通用)的技巧,例如 ptracing/扫射父进程,或在父进程中设置一个环境变量,该变量将由其所有后代继承。

注意:在 Linux 上,子进程可以重新指定为 PID 1 以外的其他进程——“子收割者”。

相关内容