2つのスクリプトを実行する方法(1つはバックグラウンドで、もう1つはバックグラウンドで)

2つのスクリプトを実行する方法(1つはバックグラウンドで、もう1つはバックグラウンドで)

バックグラウンドプロセスにリンクされたスクリプトがあります。今度は2番目のスクリプトを一緒に実行し、最初のスクリプト(バックグラウンドプロセスの開始)を実行したいと思います。

2番目のプロセスが完了したら、バックグラウンドプロセスが自動的に終了するように終了コマンドを最後に追加することもできます。

例:スクリプト1

#!/bin/tcsh
#
background process &
#

一度実行すると

スクリプト2:

#!/bin/tcsh
#
matlab <program.m>
#

スクリプト2が完了したら、両方のプロセスを終了します。どのように? ?

事前にありがとう

答え1

私はあなたが彼らが「一緒に」始めたいと言うとき、あなたは比較的互いに近いことを意味すると仮定します。これを行うには、必要な順序でスクリプトを1行ずつ実行します。

#!/bin/bash
./script2.sh &
.script1.sh

バックグラウンドプロセスの終わりをキャプチャするには、最初のプロセスのPIDを保存する必要があります。これを行うには、スクリプトプロセスをバックグラウンドに置き、$!ローカル変数に保存します。

フォアグラウンドスクリプトの終了時にバックグラウンドプロセスも終了したい場合は、Bashのtrap機能を利用すればよい。実行したい関数またはコードブロックと捕捉したい信号を渡します。

#!/bin/bash
./script2.sh &
SCRIPT_2_PID=$!
trap "kill $SCRIPT_2_PID; exit" SIGHUP SIGINT SIGTERM
./script1.sh

このtrap関数は提供された信号に対する一般的な応答を置き換えるため、スクリプトを終了するにはCTRL+Cこの関数を含める必要がありますexit

関連情報