シェルでブロックプロセスの実行後に別のプロセスを呼び出す

シェルでブロックプロセスの実行後に別のプロセスを呼び出す

本質的にブロックされるプロセスがあります。まず実行されます。 2番目のプロセスを実行するには、最初のプロセスをバックグラウンドに移動し、2番目のプロセスを実行します。 wait ステートメントを使用して端末で待機します。しかし、シェルを終了した後(CTRL+を押すC)、最初のプロセスがスムーズに終了しないようです。シェルスクリプトは次のとおりです。

実行.sh

#!/bin/sh

# start process one in background
python3 -m http.server 8086 & 

# start second process
firefox "http://localhost:8086/index.html"
 
wait

同様の質問が見つかりましたここしかし、正しく動作しないようです。デフォルトでは、2 番目に電話すると、サーバーは./execute.sh「アドレスがすでに使用中です」と言います。これは、サーバーが正常にシャットダウンできないことを意味します。一方、端末でサーバーを手動で実行すると、スムーズにシャットダウンします。

ベストアンサー1

ctrl + cを押したときにプロセスが終了するように割り込みをキャプチャすることもできます。

#!/bin/sh

trap ctrl_c INT

ctrl_c () {
    kill "$bpid"
    exit
}

# start process one in background
python3 -m http.server 8086 &
bpid=$!

# start second process
firefox "http://localhost:8086/index.html"
 
wait

おすすめ記事