Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 进程能否判断它是否是由init直接启动的?_Unix - Fatal编程技术网

Unix 进程能否判断它是否是由init直接启动的?

Unix 进程能否判断它是否是由init直接启动的?,unix,Unix,在Unix系统上,有两种情况将返回1:要么调用进程的原始父进程已退出,要么它是由init直接启动的。有时,一个人可能希望根据两个人中的哪一个做出不同的行为;例如,中的程序希望在其父级退出时退出,一种检测方法是注意getppid返回的值现在为1,但init从不退出,因此如果该程序是由init直接启动的,则不应退出。在main的开头调用getppid是无法判断的,因为您的家长可能在您有机会运行之前就已经退出了,例如,如果它使用了双叉技巧来与shell分离 在过去,由init直接启动对于一小部分进程,

在Unix系统上,有两种情况将返回1:要么调用进程的原始父进程已退出,要么它是由
init
直接启动的。有时,一个人可能希望根据两个人中的哪一个做出不同的行为;例如,中的程序希望在其父级退出时退出,一种检测方法是注意
getppid
返回的值现在为1,但
init
从不退出,因此如果该程序是由
init
直接启动的,则不应退出。在
main
的开头调用
getppid
是无法判断的,因为您的家长可能在您有机会运行之前就已经退出了,例如,如果它使用了双叉技巧来与shell分离

在过去,由
init
直接启动对于一小部分进程,
/etc/rc
和一些
getty
来说只是一种现实的可能性,但是现在我们有了容器和更强大的“系统管理器”程序作为
init
运行,所以它更有可能出现


所以问题是,程序是否有100%可靠的方法来判断其原始父级是否是
init
?特定于操作系统的答案是可以的,我几乎可以肯定在POSIX中没有办法做到这一点。

进程运行时间应该是系统启动时启动它的if
init
的一个指标,我想?没有办法,POSIX系统中没有定义亲子关系历史记录。进程运行时应该是系统启动时启动它的if
init
的指示器,我想?不可能,POSIX系统中没有定义亲子关系历史记录。