从后台进程退出脚本?

从后台进程退出脚本?

我正在观察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命令有点长,我缩写了以引起对重要部分的注意。

相关内容