バックグラウンドプロセスにリンクされたスクリプトがあります。今度は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
。