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

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

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 コマンドは少し長いですが、重要な部分に注意を喚起するために省略しました。

関連情報