【问题标题】:How do I know whether bash kill will use a pid or a jobspec?我如何知道 bash kill 将使用 pid 还是 jobspec?
【发布时间】:2013-01-30 00:08:03
【问题描述】:

来自精美的手册页:

kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l [sigspec | exit_status]
    Send  the  signal  named  by sigspec or signum to the processes named by pid or 
    jobspec.  sigspec is etc. etc....

那么是什么决定了kill 1 是杀死init 进程还是杀死jobspec 1?

【问题讨论】:

  • 呵呵,不知道kill支持的jobspec,我一直用通用的jobs -x kill %1
  • @bishop 不这么认为,我认为是 shell 拦截了 kill 以将该功能添加到其工作管理中。
  • @bishop 我想知道jobs -x kill %1; 是否也创建了一个多余的过程。 jobs 是一个内置函数,但它实际上可能会调用 kill(1) (并且 bash 将用 PID 替换 jobspec 以便 kill(1) 可以真正完成它的工作)。如果您使用kill %1kill 是内置的,因此不会运行新进程。如果您已达到机器上运行进程的限制,这将特别有用。

标签: shell syntax process sh kill


【解决方案1】:

使用 kill 1 您将发送一个信号以使用 pid 1 进行进程。要杀死作业 1,您必须输入

  kill %1

jobspec 是 %

【讨论】:

  • 这有记录吗?
  • @LimitedAtonement 至少不在bash 手册页中。很奇怪,因为这是在 man jobs 中看到的。
  • @Walf 谢谢! man jobs 谈到 kill(1) 采用 % 前缀,而不是 man kill。现在这对我来说很有意义,因为如果你真的运行 kill(1),jobspecs 将不起作用! Jobspecs 是一个 bash 的东西,kill 无法知道。 help kill 说“Kill 是一个内置的 shell,原因有两个:它允许使用作业 ID……”。
  • @LimitedAtonement 你必须有更新版本的bash,我在两个手册页中都没有看到jobspec 格式定义。
  • @Walf :这似乎现在记录在 bash 手册页(Devuan Chimaera 上的 bash 5.1.4)中 - 尽管不是非常清楚。 kill 文档说 pid | jobspec 并且关于作业控制的部分首先出现了短语 jobspec,它说作业规范以 % 开头。
猜你喜欢
  • 2019-01-10
  • 1970-01-01
  • 2014-12-20
  • 2016-01-11
  • 2016-10-07
  • 2011-01-30
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
相关资源
最近更新 更多