Bashスクリプトは、自分が起動した他のスクリプトのインスタンスのみを終了する必要があります。

Bashスクリプトは、自分が起動した他のスクリプトのインスタンスのみを終了する必要があります。

現在の場合、特定のスクリプト"calling.sh"は、バックグラウンドで別のスクリプト"calling.sh"を起動し、別のタスクを実行し、しばらくスリープ状態になり、次に...pkill called.shこれはうまく機能します。

その後、他の端末でも「called.sh」を実行したいと思います。スタンドアロンスクリプトでCalling.shを起動する前後にいつでも可能です。これらの独立したインスタンスしてはいけない"calling.sh"によって終了しました。

この目標をどのように達成できますか?直観によると、呼び出しスクリプトは、自分が開始するプロセスと同時に実行される同じ名前の別のプロセスを区別できる必要があります。

変形として、「calling.sh」は「calling」を開始することもできます。シンボリックリンク「call.sh」で。上記の状況を管理するのは複雑ですか?シンボリックリンクを使用するには、どのような具体的な考慮事項と調整が必要ですか?

ベストアンサー1

この名前で殺さないでください。calling.shスクリプトが後で終了したいプロセスを呼び出しているので、$!(from man bash)を使用してください。

!bg非同期コマンドとして実行または組み込まれたコマンドを使用して、最近バックグラウンドに追加されたジョブのプロセスIDに展開されます。

だからあなたがcalling.sh次のような場合:

called.sh &
## do stuff
pkill called.sh

次のように変更してください。

called.sh &
calledPid=$!
# do stuff
kill "$calledPid"

おすすめ記事