[解決済み] 最初のコマンドの終了を待つには?
質問
私はbashでスクリプトを書いていて、内部で2つのbashスクリプトを呼び出しています。最初のスクリプトはバックグラウンドで実行されるさまざまなテストを含み、2番目のスクリプトは最初のスクリプトの結果を表示します。
この2つのスクリプトを次々に実行すると、最初のスクリプトが終了する前に2番目のスクリプトが実行され、間違った結果が表示されることがあります。
私は両方のスクリプトをsourceコマンドで実行しています。何か良い提案はありますか?
source ../../st_new.sh -basedir $STRESS_PATH -instances $INSTANCES
source ../../results.sh
解決方法は?
シェルスクリプトは、どのような方法で実行されても、1つのコマンドを次々と実行します。そのため、あなたのコードでは
results.sh
の最後のコマンドの後に
st_new.sh
が終了しました。
さて、これを台無しにする特別なコマンドがあります。
&
cmd &
は、新しいバックグラウンド・プロセスを開始し、以下を実行することを意味します。
cmd
を使用します。バックグラウンド・プロセスを開始したら、直ちにスクリプト内の次のコマンドを続行します。
それはつまり
&
を待たずに
cmd
を実行します。私の推測では
st_new.sh
はそのようなコマンドを含んでいます。もしそうであれば、スクリプトを修正する必要があります。
cmd &
BACK_PID=$!
これは、新しいバックグラウンドプロセスのプロセス ID (PID) を変数
BACK_PID
. あとは終了を待つだけです。
while kill -0 $BACK_PID ; do
echo "Process is still active..."
sleep 1
# You can add a timeout here if you want
done
または、特別な処理や出力が必要ない場合は、単に
wait $BACK_PID
を省略しても、実行時に自動的にバックグラウンド・プロセスを開始するプログラムもありますので、ご注意ください。
&
. ドキュメントを確認すると、ファイルに PID を書き込むオプションがあることが多く、また、オプションを指定してフォアグラウンドで実行し、シェルの
&
コマンドでPIDを取得することができます。
関連
-
[解決済み] 共有メモリページとフォーク
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] find .コマンドでディレクトリを除外する方法
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 "find: paths must priore expression:" カレントディレクトリのファイルも見つける再帰的検索を指定するには?
-
[解決済み】Bashのexportコマンド
-
[解決済み】スラッシュとrsyncコマンド
-
[解決済み] "grep -q" のポイントは?
-
[解決済み] シェルで 'exec ls' を実行すると何が起こるか、またその理由は?[クローズド]。
-
[解決済み] FIN_WAIT1とはどのような意味ですか?
-
[解決済み] awk や sed を使って特定の文字を削除する
-
[解決済み] ユーザーデータスクリプトは私のカスタムAMIでは動作しませんが、標準のAmazon linuxでは動作しています。
-
[解決済み] ls: 読み込みディレクトリ .: 入出力エラー [閉じた].
-
[解決済み] sudo: must be setuid root" というメッセージが出るが、sudo は既に root が所有している [closed] 。