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