【问题标题】:How to kill respawned process by init in linux如何在linux中通过init杀死重生的进程
【发布时间】:2014-01-09 09:47:35
【问题描述】:

我正在重生 ttyS1 端口上的 /bin/bash。ttyS0 是我的控制台。 下面给出了 inittab 条目。

::respawn:/bin/bash /dev/ttyS1 2> /dev/ttyS1

我的问题是如何禁用/终止响应,以便我可以使用串行端口 用于其他应用程序。

【问题讨论】:

    标签: bash shell kernel tty


    【解决方案1】:

    您可以像其他进程一样终止该 bash 进程。但是,init 会立即重新生成它 - 没有任何收获。

    要禁用该进程,您必须编辑 /etc/inittab 并注释掉该行。 要通知 init 这一变化,您必须向 init 发送 SIGHUP:kill -HUP pid-of-init。 (我认为 pid-of-init 始终为 1)。

    如果在某些情况下您需要将 bash 连接到 ttyS1,您可能需要指定 init 应该启动 bash 的某些运行级别。

    希望这个答案对您有所帮助...(有关详细信息,请参阅 man inittab

    【讨论】:

    • 好的,谢谢您的回复。如果我们杀死重生的进程并修改/注释掉 inittab 中的条目就足以让 init 不再重生。
    • 不,反过来——首先编辑 inittab,然后发出 init 信号,然后终止剩余的进程。
    • 我的 Ubuntu 上没有 /etc/inittab,但配置在 /etc/init/proc_name.conf 中。我试图删除它并发出初始化信号,但它没有帮助。还有其他想法吗?
    【解决方案2】:

    在我的 Ubuntu 上,这对我有用:

    sudo rm -f /etc/init/<proc_name>.conf
    sudo initctl stop <proc_name>
    

    它返回了一条消息:

    initctl: Method "Get" with signature "ss" on interface "org.freedesktop.DBus.Properties" doesn't exist
    

    但是这个过程无论如何都没有重新生成就停止了。

    【讨论】:

      【解决方案3】:

      inittab 必须重新检查,否则它将启动该过程。 删除/etc/inittab上要处理的命令行链接并执行:

      # init q
      

      # telinit q
      

      然后,你可以杀死进程,它不会重生。

      【讨论】:

      • 该问题与 help center 中定义的 Stack Overflow 无关。请不要回答此类问题;相反,您应该标记它们以引起注意,它们将被适当地关闭或迁移。
      • 阻止新用户的工作做得很好。在 2016 年回答了一个问题,但现在知道要保持安静。为什么不在问题下方发表评论?为什么?问题还在这里,这个答案很好。
      猜你喜欢
      • 2015-12-31
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2015-01-11
      相关资源
      最近更新 更多