バックグラウンドプロセスが終了すると、フォアグラウンドプロセスは安全に終了します。

バックグラウンドプロセスが終了すると、フォアグラウンドプロセスは安全に終了します。

2つのスクリプトがあります。最初は背景にあり、2番目は前景にあります。

trap "ret=\$?; rm -f pipe1 pipe2; exit \$ret" EXIT INT TERM QUIT
my.bin > pipe1 < pipe2 &
my-term.sh pipe1 pipe2

my-term.shstdin/stdoutを介してユーザーと対話します(CLIターミナルプログラムに似ています)。

while read -ep "prompt> " l; do echo $l; done

my.binexit 0シミュレートするスクリプトです。

my-term.shmy.bin何らかの理由でやめた場合、どうやって終了しますか?

働くもの:

trap "ret=\$?; rm -f pipe1 pipe2; exit \$ret" EXIT INT TERM QUIT
(my.bin > pipe1 < pipe2; kill -9 $$) &
my-term.sh pipe1 pipe2

ただし、my-term.shクリーニングが中断される可能性があります。正しいことは何ですか?

ベストアンサー1

一連のシグナルを試し、1つが失敗した場合は、3秒待ってから(睡眠時間は何をすべきかmy-term.shによって調整できます)、別のシグナルを試してください。

(my.bin > pipe1 < pipe2; x=$$ ; \
 for sig in SIGTERM SIGINT SIGQUIT SIGABRT SIGKILL ; \
 do kill -${sig} $x && break ; sleep 3s ; done ; ) &
my-term.sh pipe1 pipe2

おすすめ記事