Выйти из сценария фонового процесса?

Выйти из сценария фонового процесса?

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

Связанный контент