killall & sleep
안녕하세요.
시그널에 대한 질문 드립니다.
아래는 펌웨어를 업그레이드하는 쉘스크립트의 일부인데요.. 이 정도면 될 것 같아 이 부분만 올렸는데, 더 필요하다면 올려드리겠습니다.
질문 내용을 아래 세번째 줄과 네번째 줄에 관련된 내용입니다. (killall -USR1 vtss_appl, sleep 3)
펌웨어 업그레이드는 콘솔에서 실행할 수도 있고 telnet을 통해 원격에서도 실행할 수 있습니다.
콘솔에서 실행할 때는 문제가 없는데, telnet으로 접속해서 스크립트를 실행하면 sleep 이후로 "1"만 출력되고 "2"는 출력되지 않습니다. 물론 콘솔에서 출력값을 확인했고요..
그래도, telnet 데몬은 죽었는지 접속이 끊어집니다. 하지만, 실제로 그 이후 펌웨어를 쓰는 과정은 진행이 되지 않습니다.
무엇이 문제일가요? killall -USR1과 sleep은 어떠한 관계이며, sleep 시간은 왜 필요한지요? 5, 7로 바꾸어서도 해 보았지만, 같은 증상이더라구요.
감사합니다.
------------------------------------------------------------------------------------
exec > /dev/console 2>&1 /console
logger -s -p daemon.notice "Firmware Update: Shutting down applications"
killall -USR1 vtss_appl
sleep 3
echo "1"
shutdown="ipsec samba miniupnpd rp-l2tpd httpd matrixssl lighttpd telnet dropbear"
for app in $shutdown; do
[ -x /etc/init.d/$app ] && /etc/init.d/$app stop >/dev/null 2>&1
done
echo "2"
lock $LOCKFILE
mount -o remount,ro /jffs
------------------------------------------------------------------------------------
shutdown="ipsec samba
여기서 telnet을 죽이는 것 같네요. 죽이니 죽는듯;;
안죽이시려면 nohup등을 사용해서 background process로 돌려야 하지 않을까요.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
관심 감사드립니다.
하지만, 저의 포인트는 killall을 하고나서 왜 sleep을 하는지 이며, sleep 시간을 얼마로 주어야 하는지에 대한 문제입니다. 제 설명이 많이 모자랐던 것 같습니다.
포인트가 왜 telnet이
포인트가 왜 telnet이 죽고 그 이후가 진행되지 않는가 인줄 알았는데 아닌가보네요.
sleep과 kill의 관계는 딱히 없습니다. 아마도 USR1을 날리고 바로 죽지 않는 경우(signal handler가 여러가지 복잡할 경우를 대비해서) sleep을 하는거겠죠. 그러므로 sleep시간이 적당히 길면 (대부분 1초도 충분)
sleep을 늘린다고 결과가 변하지 않습니다.
터미널이 죽고 그 아래에 있는 프로세스들은 터미널을 잃어버려서 SIGHUP을 받게 되며, 이 시그널때문에
프로세스가 죽게 됩니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
댓글 달기