首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >/etc/inittab已在运行的进程,Debian9

/etc/inittab已在运行的进程,Debian9
EN

Unix & Linux用户
提问于 2019-03-21 10:05:06
回答 1查看 3K关注 0票数 2

我在/etc/inittab中添加了一个步兵式以重新生成一个二进制文件。该条目如下:

代码语言:javascript
复制
id:2:respawn:/path-to-my-bin

然后执行init q,进程由inittab启动。如果我扼杀了这个过程,它就会重生。

问题

当我做以下事情时,会发生奇怪的行为:

  1. 手动运行/path-to-my-binary
  2. /etc/inittab中添加上面的条目
  3. 运行init q

结果:即使进程已经在运行,它也会重新出现。

此外,如果二进制文件被设置为在运行级别2的init.d启动时运行,那么inittab将在启动时立即响应它。

EN

回答 1

Unix & Linux用户

发布于 2019-03-21 10:25:04

简单的答案是:不要这样做。

如果您希望按照/etc/inittab中的配置处理流程,则不能手动或在其他地方启动它。

如果进程的命令与inittab中的条目匹配,则init不检查现有进程。它只监视它的子进程,即由init自己启动的进程。

当您运行init q时,init进程知道它尚未为您的行id:2:respawn:/path-to-my-bin启动进程并启动它。

不幸的是,我不知道这是在哪里显式指定的。

对我来说,很明显,这种情况必须是这样的,原因有几点:

  1. 当子进程终止时,init将得到一个信号,因此它可以获得进程的状态,检查来自inittab的规范,并在必要时重新启动该进程。这是基于事件的。对于不相关的进程,这是不可能的,因此init必须检查所有进程。这可能是投票。
  2. init不知道执行与inittab行相同的命令的单独进程的目的是什么。运行流程的第二个实例可能是期望的行为,也可能不是期望的行为。
  3. 根据init,如果您在init已经启动实例之后手动启动程序,那么inittab会做什么呢?如果inittab启动的进程稍后会终止呢?或者另一个进程会在稍后终止?

由于有许多未解决的问题,init自然只处理它的子进程,而忽略任何不相关的进程。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/507668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档