Я смотрю 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
свой основной скрипт в подоболочку, а затем 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 немного длиннее, я сократил ее, чтобы привлечь внимание к важным частям.