バックグラウンドプロセスでスクリプトを終了しますか?

バックグラウンドプロセスでスクリプトを終了しますか?

wpa_supplicantパスワードが間違っている場合は、スクリプトを終了できるように見ています。

以下にコードブロック全体の背景を含めました。echo実行していることがわかりますが、exit基本スクリプトは停止しないようです。

  (sudo stdbuf -o0 wpa_supplicant -Dwext -i$wifi -cwifi.conf 2>&1 \
    | grep -m 1 "pre-shared key may be incorrect" \
    && echo I see this \
    && exit) &

exit私はこれがすでにバックグラウンドで実行されているスレッドを殺していると思いますか?

そうですか?それでは、killここでどのように親になることができますか?

答え1

pidデフォルトスクリプトをサブシェルに渡し、kill必要に応じて渡すことができます。

export mypid=$$

(sudo stdbuf -o0 wpa_supplicant -Dwext -i$wifi -cwifi.conf 2>&1 \
| grep -m 1 "pre-shared key may be incorrect" \
&& echo I see this \
&& kill $mypid) &

答え2

ところで、exitすでにバックグラウンドにあるプロセスに影響を与え、ゼロ終了状態を準備します。とにかくプロセスが中断される直前なので、躊躇せずに「キル」と呼びます。

バックグラウンドでwpaコマンドを実行してPIDを追跡するため、以下を使用する必要はありませんkillall

bash -c 'echo $$ > /tmp/pid; exec wpa_supplicant 2>&1 > /tmp/out' &
sleep 1
egrep 'pre-shared key may be incorrect' /tmp/out && kill `cat /tmp/pid`

わかりました、wpaコマンドが少し長いので、重要な部分に注意を引くために短縮しました。

関連情報