Kill
從後台程序退出腳本?
我正在看
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
在這裡父母?
您可以將
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) &
對,
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 命令有點長,我縮寫以提請注意重要部分。