Sair do script de um processo em segundo plano?

Sair do script de um processo em segundo plano?

Estou observando wpa_supplicantpara poder matar meu script se a senha estiver errada.

Eu apresento todo o bloco de código abaixo. Posso ver a echoexecução, mas exitparece que não interrompeu meu script principal.

  (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) &

Eu suspeito que exitaqui está apenas matando um tópico que estava em segundo plano.

É esse o caso? Se sim, como posso ser killo pai aqui?

Responder1

Você pode passar o pidscript principal para o subshell e depois killquando quiser:

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) &

Responder2

Certo, exitestá afetando o processo que está em segundo plano, proporcionando status de saída zero. Eu não chamaria isso de “matar”, já que o processo estava prestes a parar de qualquer maneira.

Execute o comando wpa em segundo plano e acompanhe seu PID para não precisar usar 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`

Eu sei, seu comando wpa é um pouco mais longo, abreviei para chamar a atenção para as partes importantes.

informação relacionada