비지박스가 있는 셋톱박스에서 TV로 몇 가지 명령을 보내는 작은 쉘 스크립트를 작성하려고 합니다. 문제는 이것이 많은 좀비 프로세스를 생성하고, 좀비 프로세스를 모두 종료하려고 할 때 종료되어서는 안 되는 일부 오디오 프로세스도 종료한다는 것입니다.
이것은 내 스크립트입니다.
TV 런처
#!/bin/sh
echo "ka 1 01" > /dev/ttyUSB0
read -t 5 response < /dev/ttyUSB0
echo "xb 1 70" > /dev/ttyUSB0
read -t 2 response < /dev/ttyUSB0
echo "kf 1 32" > /dev/ttyUSB0
read -t 2 response < /dev/ttyUSB0
echo "km 1 01" > /dev/ttyUSB0
#killall sh
TV 방송국
#!/bin/sh
echo "ka 1 00" > /dev/ttyUSB0
#killall sh
나는 이것을 다음과 같이 부릅니다(스크립트의 일부):
case "$1" in
led-on)
echo 3 > /sys/class/leds/mag-front-led/mode
nohup sh /home/default/tvstop.sh &
;;
led-off)
echo 2 > /sys/class/leds/mag-front-led/mode
nohup sh /home/default/tvstart.sh &
;;
그렇다면 어떻게 올바르게 종료합니까? 좀비의 모습은 이렇습니다.
3637 root Z [sh]
3660 root Z [sh]
3696 root Z [sh]
3719 root Z [sh]
3751 root Z [sh]
3766 root Z [sh]
3798 root Z [sh]
3829 root Z [sh]
3913 root Z [sh]
3984 root Z [sh]
4489 root 6960 S sshd: root@pts/0
4533 root 2704 S -sh
10478 root Z [sh]
10516 root Z [sh]
10574 root Z [sh]
10597 root Z [sh]
10630 root Z [sh]
10737 root Z [sh]
11072 root Z [sh]
11103 root Z [sh]
11413 root Z [sh]
11436 root Z [sh]
11457 root DW [STVID.InjecterT]
11458 root SW [STVID[0].MPEG2P]
11459 root DW [tfm_89287480]
11460 root SW [STVID[0].Produc]
11461 root SW [STVID[0].Displa]
11462 root SW [STVID[0].ErrorR]
11477 root Z [sh]
11500 root Z [sh]
11525 root Z [sh]
11548 root Z [sh]
11581 root Z [sh]
11605 root Z [sh]
11638 root Z [sh]
11661 root Z [sh]
11688 root Z [sh]
19185 root 2704 R ps