從後台進程退出腳本?

從後台進程退出腳本?

我正在觀察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命令有點長,我縮寫了以引起對重要部分的注意。

相關內容