Bash 中 PID 和 jobspec 的使用是否有重叠?

Bash 中 PID 和 jobspec 的使用是否有重叠?

Bash 中 PID 和 jobspec 的使用是否有重叠?

在我的脚本中,我使用 . 将命令的 PID 存储在变量中$!。然后我disown使用 PID 进行调用,从 shell 的活动作业表中删除该作业。稍后,脚本可能会或可能不会kill根据情况杀死该进程。这样做的目的是为了使难看的“作业被终止”消息不会出现在终端中,并使我的脚本整洁的输出看起来难看。

它工作正常,但我对 PID 和 jobspec 之间的差异感到困惑,因为......

$! - the PID of the most recent background command.
disown [-ar] [-h] [jobspec ...]
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec]

disown需要一个 jobspec,但我给它一个 PID。man bash表示disown返回 0,除非 jobspec 未指定有效作业。我给它一个 PID,它返回 0,所以一切看起来都正常。

对 jobspec 的搜索man bash没有提到一般可以使用 PID 来代替 jobspec,并且该disown条目也没有说可以使用 PID 来代替 jobspec。

PID 和 jobspec 不是同一件事,但它们的使用是否有重叠?如果不是那么为什么我的代码可以工作?是否像disown能够采用 PID 而不是 jobspec 一样简单,并且这没有记录在 中man bash

谢谢。

编辑

choroba 是正确的,disown能够采用 PID 而不是 jobspec 似乎确实是disown.我现在已经通过对 2 个不同版本的 GNU Bash 的测试证实了这一点。

GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) [On Linux Mint]
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu) [On Debian]

虽然 GNU 没有记录(据我所知),但 Linux 文档项目记录了它,在他们的第三句话中作业控制命令页。

我给 GNU Bash 手册页的维护者发了一封电子邮件,建议disown更改 shell 内置命令部分中的条目:

From: disown [-ar] [-h] [jobspec ...]
To:   disown [-ar] [-h] [jobspec | pid] ...

现在他已经确认了错误并进行了更改。

答案1

这似乎是 的一个未记录的功能disown。 Bash 不能将 PID 误认为作业规范,因为作业规范始终以%.

相关内容