Bash

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

  • April 16, 2019

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

在我的腳本中,我將命令的 PID 儲存在一個變數中,使用$!. 然後我呼叫disownPID 從 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 誤認為是作業規範,因為作業規範總是以%.

引用自:https://unix.stackexchange.com/questions/244080