BashでのPIDとjobspecの使用に重複はありますか?
私のスクリプトでは、$!
を使用してコマンドのPIDを変数に格納します。次に、PIDを指定してdisown
を呼び出し、シェルのアクティブなジョブテーブルからジョブを削除します。後で、スクリプトは状況に応じて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
は、jobspecが有効なジョブを指定しない限り、disown
は0を返すことを示しています。 PIDを指定すると、0が返されるので、すべて問題ないようです。
man bash
でjobspecを検索しても、一般にjobspecの代わりにPIDを使用できることは言及されておらず、disown
エントリはjobspecの代わりにPIDを使用できることを示していません。
PIDとjobspecは同じものではありませんが、それらの使用に重複はありますか?そうでない場合、なぜ私のコードは機能するのですか? disown
がjobspecの代わりにPIDを取得できるのと同じくらい簡単で、これはman bash
に文書化されていませんか?
ありがとう。
[〜#〜]編集[〜#〜]
chorobaは正しいですが、disown
がjobspecの代わりにPIDを取得できることは、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 Documentation Projectの ジョブ制御コマンド ページの3番目の文に文書化されています。
GNU Bashのmanページのメンテナーに、シェルの組み込みコマンドセクションのdisown
エントリを変更するように提案するメールを送りました。
From: disown [-ar] [-h] [jobspec ...]
To: disown [-ar] [-h] [jobspec | pid] ...
彼はエラーを確認し、変更を加えました。
disown
の文書化されていない機能のようです。 jobspecは常に%
で始まるため、BashはPIDをjobspecと間違えることはありません。