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