たとえば、1つのシェルセッションでコマンドを実行するとしますbash -c 'apt-get update && apt-get upgrade'
。5分後、私は外に出てスナックを食べることにしました。出口が成功したか失敗したかを通知する何らかのメカニズムを追加するのを忘れていました。
さて、私は今何をしますか?別の端末からその他のコマンド(または具体的にはそのPID)の終了ステータスを問い合わせることができれば、おそらく何らかのポップアップを表示することができるでしょう。だから問題は:別の端末からすでに実行中のプロセスの終了ステータスを問い合わせるにはどうすればよいですか?
言い換えると、
端末Aで実行中のプロセスがあり、そのPIDがわかっている
端末Bでコマンドを実行するとき
次に、端末Aのプロセスが終了ステータス0または終了ステータス> 1で終了したかどうかを知ることができるはずです。
コマンドBで「ウォッチャー」をアタッチした後、指定された任意のプロセスA(PIDが与えられた)が終了すると何か(終了コードを報告するアラートコマンド?)Aが、後でBを入力したのと同じシェルで実行されているバックグラウンドジョブであるとは想定できません。
—
バイトコマンダー
@ByteCommander正解。それはフォアグラウンドの仕事です。
—
Sergiy Kolodyazhnyy
別のシェルの子から戻りコードを取得することはできないと思います。
—
バイトコマンダー
wait
終了後、現在のシェルでバックグラウンドプロセスのコードを取得するために使用できますが、他のシェルにクエリを実行できるものは見つかりませんでした。プロセスがまだ実行されているかどうかを監視し、プロセスが終了したときにアラートを発生させることも、簡単ですが、その終了コードを見つけることはできません。私が考えることができる唯一の方法PROMPT_COMMAND
は、一時ファイルまたは同様のアクセス可能な場所に最後の終了コードを格納するようにシェルを準備することを必要とするでしょう。それはオプションでしょうか?
@ByteCommanderいいえ。端末Aを準備する必要はありません。端末Bからすべてを実行します。信頼してください。それは可能です。
—
Sergiy Kolodyazhnyy
まあ、それは永久的な準備になるでしょう(一度.bashrcを編集する)が、大丈夫です。答えを見つけたら楽しみに読んでください。
—
バイトコマンダー