BashでPIDと作業仕様を使用するのに重複する部分はありますか?
私のスクリプトでは、.を使用してコマンドのPIDを変数に保存します$!
。次に、disown
PID を使用して呼び出して、シェルのアクティブなタスクのリストからタスクを削除します。後でスクリプトはkill
状況に応じてプロセスを終了することも、終了しないこともあります。これの目的は、見苦しい「作業が終了しました」というメッセージが端末に表示されず、私のスクリプトのきちんとした出力が見えないようにすることです。
うまくいきますが、PIDとjobspecの違いについて混乱しています。
$! - the PID of the most recent background command.
disown [-ar] [-h] [jobspec ...]
kill [-s sigspec | -n signum | -sigspec] [pid | jobspec]
disown
作業仕様が必要ですが、PIDを提供します。 jobspecが有効なジョブを指定しない限り、0が返されることをman bash
示します。disown
PIDを指定すると0が返されるので、すべてが大丈夫です。
jobspec の検索では、man bash
PID が一般に jobspec の代わりに使用できるという内容は記載されていませんdisown
。
PIDとjobspecは同じではありませんが、使い方が重なる部分がありますか?そうでなければ、なぜ私のコードはうまくいくのですか?disown
作業仕様の代わりにPIDを取得し、それを文書化しないのと同じくらい簡単ですかman bash
?
ありがとうございます。
編集する
chorobaの言葉は正しいです。disown
jobspecの代わりにPIDを使用できるのは本当のようですdisown
。これで、GNU Bashの2つの異なるバージョンをテストしてこれを確認しました。
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文書化プロジェクトは3番目の文で文書化します。ジョブ制御コマンドページ。
私はGNU Bashのマニュアルページの管理者にシェル組み込みdisown
コマンドセクションのエントリの変更を提案する電子メールを送りました。
From: disown [-ar] [-h] [jobspec ...]
To: disown [-ar] [-h] [jobspec | pid] ...
今、彼はエラーを確認して変更しました。
ベストアンサー1
これは文書化されていない機能のようですdisown
。 BashはPIDを作業仕様として誤解することはできません。作業仕様は常に%
。