Unix 进程能否判断它是否是由init直接启动的?
在Unix系统上,有两种情况将返回1:要么调用进程的原始父进程已退出,要么它是由Unix 进程能否判断它是否是由init直接启动的?,unix,Unix,在Unix系统上,有两种情况将返回1:要么调用进程的原始父进程已退出,要么它是由init直接启动的。有时,一个人可能希望根据两个人中的哪一个做出不同的行为;例如,中的程序希望在其父级退出时退出,一种检测方法是注意getppid返回的值现在为1,但init从不退出,因此如果该程序是由init直接启动的,则不应退出。在main的开头调用getppid是无法判断的,因为您的家长可能在您有机会运行之前就已经退出了,例如,如果它使用了双叉技巧来与shell分离 在过去,由init直接启动对于一小部分进程,
init
直接启动的。有时,一个人可能希望根据两个人中的哪一个做出不同的行为;例如,中的程序希望在其父级退出时退出,一种检测方法是注意getppid
返回的值现在为1,但init
从不退出,因此如果该程序是由init
直接启动的,则不应退出。在main
的开头调用getppid
是无法判断的,因为您的家长可能在您有机会运行之前就已经退出了,例如,如果它使用了双叉技巧来与shell分离
在过去,由init
直接启动对于一小部分进程,/etc/rc
和一些getty
来说只是一种现实的可能性,但是现在我们有了容器和更强大的“系统管理器”程序作为init
运行,所以它更有可能出现
所以问题是,程序是否有100%可靠的方法来判断其原始父级是否是
init
?特定于操作系统的答案是可以的,我几乎可以肯定在POSIX中没有办法做到这一点。进程运行时间应该是系统启动时启动它的ifinit
的一个指标,我想?没有办法,POSIX系统中没有定义亲子关系历史记录。进程运行时应该是系统启动时启动它的ifinit
的指示器,我想?不可能,POSIX系统中没有定义亲子关系历史记录。