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

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

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 명령이 조금 길기 때문에 중요한 부분에 주의를 끌기 위해 축약했습니다.

관련 정보