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