Linuxコマンドラインからプロセスを切り離して再接続し、存在しない子プロセスの終了コードを親プロセスに返します。

Linuxコマンドラインからプロセスを切り離して再接続し、存在しない子プロセスの終了コードを親プロセスに返します。

多くの連続ステップを実行する必要があるスクリプトがあり、その一部はいくつかの下付き文字で書かれています。添字は順次実行されます。

  1. サブスクリプトの終了ステータスを待っている実行中の親プロセス/スクリプトを停止する方法はありますか?
  2. 親プロセス/スクリプトのppidを使用してスクリプトを実行する方法はありますか?
  3. すでに実行されているが待機している親スクリプトにサブスクリプトの終了ステータスを渡す方法はありますか?

子プロセス/スクリプトが終了したか、変更が必要ないくつかの手順を実行するとします。これにより、変更されたサブスクリプトをバックグラウンドで実行し、親スクリプトを停止し、元のサブスクリプトを終了し、親スクリプトに成功コードを渡しながら親スクリプトを続行できます。親スクリプトがすでに実行を開始した後、上記のプロセスを実行しようとしています。

サブスクリプトを終了すると、親スクリプトは失敗します。したがって、親スクリプトを編集して再実行するか、以前に親スクリプトで実行した処理をキャンセルしてから、親スクリプトのすべてのステップを再実行する必要があります。時間がかかります。

ベストアンサー1

  • 質問1:
#!/bin/bash
echo "I am the parent process and will launch a child and wait until it's finished"
/path/to/child.sh
echo "The child has finished and it's exitstatus is: $?"
  • 質問2:これは理論的には不可能です。実際にはこの動作を模倣することになります。子を親に、親を子にフォークして処理すると、「新しい親」は「前の親」のPPIDを持つようになります。

  • $?問題 3: 子プロセスの終了状態 (bash とほとんどのシェルで) が親プロセスの var で終了します。質問1に対する回答のスクリプトを参照してください。

おすすめ記事