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 误认为作业规范,因为作业规范始终以%
.