백그라운드 프로세스에서 스크립트를 종료하시겠습니까?

백그라운드 프로세스에서 스크립트를 종료하시겠습니까?

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종료 상태를 0으로 조정하여 백그라운드에 있는 프로세스에 영향을 미치고 있습니다. 어쨌든 프로세스가 중단되기 직전이었기 때문에 나는 그것을 "살인"이라고 부르지 않을 것입니다.

백그라운드에서 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 명령이 조금 더 길기 때문에 중요한 부분에 주의를 환기시키기 위해 축약했습니다.

관련 정보