我正在觀察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
主腳本的 傳遞給子 shell,然後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命令有點長,我縮寫了以引起對重要部分的注意。