我在/etc/inittab中添加了一个步兵式以重新生成一个二进制文件。该条目如下:
id:2:respawn:/path-to-my-bin然后执行init q,进程由inittab启动。如果我扼杀了这个过程,它就会重生。
当我做以下事情时,会发生奇怪的行为:
/path-to-my-binary/etc/inittab中添加上面的条目init q结果:即使进程已经在运行,它也会重新出现。
此外,如果二进制文件被设置为在运行级别2的init.d启动时运行,那么inittab将在启动时立即响应它。
发布于 2019-03-21 10:25:04
简单的答案是:不要这样做。
如果您希望按照/etc/inittab中的配置处理流程,则不能手动或在其他地方启动它。
如果进程的命令与inittab中的条目匹配,则init不检查现有进程。它只监视它的子进程,即由init自己启动的进程。
当您运行init q时,init进程知道它尚未为您的行id:2:respawn:/path-to-my-bin启动进程并启动它。
不幸的是,我不知道这是在哪里显式指定的。
对我来说,很明显,这种情况必须是这样的,原因有几点:
init将得到一个信号,因此它可以获得进程的状态,检查来自inittab的规范,并在必要时重新启动该进程。这是基于事件的。对于不相关的进程,这是不可能的,因此init必须检查所有进程。这可能是投票。init不知道执行与inittab行相同的命令的单独进程的目的是什么。运行流程的第二个实例可能是期望的行为,也可能不是期望的行为。init,如果您在init已经启动实例之后手动启动程序,那么inittab会做什么呢?如果inittab启动的进程稍后会终止呢?或者另一个进程会在稍后终止?由于有许多未解决的问题,init自然只处理它的子进程,而忽略任何不相关的进程。
https://unix.stackexchange.com/questions/507668
复制相似问题