スレーブスクリプトからマスタースクリプトを終了するには? (バッシュから)

スレーブスクリプトからマスタースクリプトを終了するには? (バッシュから)

私は「ツールキット」を作成しようとしていますが、私が望むのは「終了」機能を持つことです。これは、私が「終了」を呼び出すたびに、私が開始したすべてが停止する必要があることを意味します。ただし、これはツールキットスクリプトだけでなく、基本スクリプトでもあります。意味は次のとおりです。

A.shをメインスクリプトのままにします。ある時点で、A.shはB.shを実行してユーザーにオプションを提供します。 B.shに常に「終了」オプションがあったらと思います。選択したら、B.shを終了する必要があります(簡単な場合は「exit」を実行します)、A.shも終了します。

もちろん、私はこれを行うことができます

if [[ $(B.sh) == "exit" ]]; then exit; fi

しかし、これはせいぜい面倒な作業であり、通常は「ツールキット」が実行する必要があるものではありません。

どうすればいいのアイデアはありますか?乾杯。

ベストアンサー1

少なくともLinuxでは、サブスクリプトに親プロセスグループを終了させることができます。これにより、親プロセス自体とそのプロセスが開始したすべての子プロセスが終了します。からman kill

ARGUMENTS
       The list of processes to be signaled can be a mixture of names and
       PIDs.

[. . .]
           -n
               where n is larger than 1. All processes in process group n are
               signaled. When an argument of the form '-n' is given, and it
               is meant to denote a process group, either a signal must be
               specified first, or the argument must be preceded by a '--'
               option, otherwise it will be taken as the signal to send.

したがって、あなたの機能は次のようになります。

killGroup(){
    pgid=$(ps -p "$$" -o pgid=)
    kill -- -"$pgid"
}

その後、プロセスグループIDを取得し、それを実行してkillそのグループIDの下のすべてのプロセスを終了します。

おすすめ記事