在Unix系统上,有两种情况getppid
将返回1:调用进程的原始父进程已退出,或者由init
直接启动。有时人们可能希望表现出不同的行为,这取决于它们中的哪一个;例如,this question中的程序想要在其父项执行时退出,并且检测到该项的一种方法是注意getppid
返回的值现在为1,但init
永不退出,如果程序由init
直接启动,则不应退出。你无法通过在getppid
的最开始时调用main
来判断,因为你的父母可能在你有机会跑出之前已经离开了 - 如果它做了双叉技巧来解散例如,shell。
在以前的日子里,由init
直接启动只是一小部分流程的现实可能性,/etc/rc
和可能一些getty
,但现在我们有容器和更强大的“系统管理员”程序以init
运行,因此更有可能出现。
所以问题是,是否有100%可靠的方法让程序判断其原始父级是init
?操作系统特定的答案是可以的,我几乎可以肯定在POSIX中无法做到这一点。