【问题标题】:Cannot kill stopped job - no job control in subprocess?无法终止已停止的作业 - 子进程中没有作业控制?
【发布时间】:2016-02-19 08:58:23
【问题描述】:

我正在使用 ash/dash 并尝试杀死一个子进程 - 它似乎没有响应:

sh & 打开一个子进程,jobs 传递[1]+ Stopped (tty Input) sh

但是试图用kill %1kill 26672 杀死这个工作是行不通的。 jobs 再次发送[1]+ Stopped (tty Input) sh

使用fg 将作业置于前台后,打开shell 进行输入。 ctrl+cctrl+z 都不起作用,但我可以分别用 exitkill -SIGKILL $$ 终止进程,用 kill -STOP $$ 停止/暂停进程(ash 中没有 suspend-command)。

另一方面 - 使用 sleep 100 执行此操作可以正常工作,直到我使用 fg 并使用 ctr+z 停止该过程。那我就不能kill这个停止的工作了。

那么我缺少什么以及终止已停止工作的解决方案是什么?我是否必须处理set -m 以及如何处理?

提前致谢。

【问题讨论】:

  • 它是什么操作系统?
  • 基本上是 Busybox - 它提供了固有的 Almqvist-Shell (ash)。

标签: shell jobs kill job-control


【解决方案1】:

你可以试试

杀死 -9 $(jobs -p)

或者,只需执行退出命令退出,它会自动杀死停止的作业

【讨论】:

    【解决方案2】:

    您可以通过kill -SIGCONT %number触发已停止的进程,如果您需要终止该进程,您可以通过kill -SIGTERM %number.终止它,我认为这会对您有所帮助。

    【讨论】:

    • 感谢您提供解决方案的提示。实际上kill -SIGKILL %1kill -KILL %1 完成了(杀死)这项工作。在使用 ash 的情况下,第二个命令有效。要查看可能的信号,shell 支持命令 kill -l 帮助。除了-SIGKILL-KILL,也可以使用-9。顺便说一句:SIGTERM没有杀死工作。
    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多