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] ...
他現在已經確認了錯誤並進行了更改。
這似乎是
disown
. Bash 不能將 PID 誤認為是作業規範,因為作業規範總是以%
.