Sair do script de um processo em segundo plano?

0

Estou assistindo a wpa_supplicant para poder matar meu script se a senha estiver errada.

Eu antecedi todo o bloco de código abaixo. Eu posso ver o echo em execução, mas o exit não parece parar 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 o exit aqui está apenas matando um thread que foi passado em segundo plano?

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

    
por Philip Kirkbride 23.11.2017 / 21:59

2 respostas

1

Você pode passar o pid de seu script principal para o subshell e, em seguida, kill quando 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) &
    
por 23.11.2017 / 22:31
1

Certo, exit está afetando o processo que foi submetido a segundo plano, organizando o 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 mantenha o controle de seu PID para que você não precise 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, o seu comando wpa é um pouco mais longo, abreviado para chamar a atenção para as partes importantes.

    
por 23.11.2017 / 22:31