一个进程可以判断它是否是由init直接启动的吗?

时间:2017-02-28 00:47:10

标签: unix

在Unix系统上,有两种情况getppid将返回1:调用进程的原始父进程已退出,或者由init直接启动。有时人们可能希望表现出不同的行为,这取决于它们中的哪一个;例如,this question中的程序想要在其父项执行时退出,并且检测到该项的一种方法是注意getppid返回的值现在为1,但init永不退出,如果程序由init直接启动,则不应退出。你无法通过在getppid的最开始时调用main来判断,因为你的父母可能在你有机会跑出之前已经离开了 - 如果它做了双叉技巧来解散例如,shell。

在以前的日子里,由init直接启动只是一小部分流程的现实可能性,/etc/rc和可能一些getty,但现在我们有容器和更强大的“系统管理员”程序以init运行,因此更有可能出现。

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

0 个答案:

没有答案