Kill

從後台程序退出腳本?

  • November 23, 2017

我正在看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 命令有點長,我縮寫以提請注意重要部分。

引用自:https://unix.stackexchange.com/questions/406653