[5분 따라하기]
bash 타임아웃 패턴
박재호(jrogue@gmail.com)
참고 자료
• <컴퓨터 vs 책> 블로그
• http://jhrogue.blogspot.com/
• OKdevTV 유튜브 방송
• 5분 따라하기 리스트:
• https://www.youtube.com/playlist?list=PLdntWJk2tJPLKNNYBVCxnde2PEB6d
zbSL
• 슬라이드 셰어
• https://www.slideshare.net/jrogue/presentations
• ASCIINEMA
• https://asciinema.org/~jrogue
오늘 소개할 내용
• 배시(bash) 셸 스크립트에서 타임아웃을 걸 수 없을까?
• 실행이 오래 걸리는 작업을 무작정 기다릴 수 없는 상황에서 사람이 스톱워
치 들고 개입을 해야 하나?
• 외부 프로그램(watchdog)이 감시해서 제어하기에는 무겁지 않을까?
bash에서 알고 넘어가야 하는 사항
• $$
• POSIX에서 $$는 원본 프로세스의 프로세스 식별자
• $BASHPID
• 배시 하위 셸 내부의 프로세스 식별자
• &
• 배경 프로세스로 동작
• KILL
• 프로세스에 시그널 전송
• TERM: 종료 시그널(해당 프로세스의 시그널 처리기에서 잡을 수 있음)
• KILL: 강제 종료 시그널(init에서 프로세스 종료)
• 모든 시그널 유형 보기
• $ kill -l
via @dongwoo
스크립트
$ (cmdpid=$BASHPID; (echo $cmdpid; sleep 5; kill -TERM $cmdpid) & exec sleep 10)
10321
Terminated
$ cat - > timeout.sh
#!/bin/sh
(cmdpid=$$; (echo $cmdpid; sleep 5; kill -TERM $cmdpid) & exec sleep 10)
<CTRL+D>
$ chmod +x timeout.sh
$ ./timeout.sh
10329
Terminated
명령행에서 직접 실행
스크립트로 만든 다음에 실행
보면서 따라해봅시다~~~
• https://asciinema.org/a/af1uoLWpsuDGITMFf34KGuICt

[5분 따라하기] bash 타임아웃 패턴

  • 1.
    [5분 따라하기] bash 타임아웃패턴 박재호(jrogue@gmail.com)
  • 2.
    참고 자료 • <컴퓨터vs 책> 블로그 • http://jhrogue.blogspot.com/ • OKdevTV 유튜브 방송 • 5분 따라하기 리스트: • https://www.youtube.com/playlist?list=PLdntWJk2tJPLKNNYBVCxnde2PEB6d zbSL • 슬라이드 셰어 • https://www.slideshare.net/jrogue/presentations • ASCIINEMA • https://asciinema.org/~jrogue
  • 3.
    오늘 소개할 내용 •배시(bash) 셸 스크립트에서 타임아웃을 걸 수 없을까? • 실행이 오래 걸리는 작업을 무작정 기다릴 수 없는 상황에서 사람이 스톱워 치 들고 개입을 해야 하나? • 외부 프로그램(watchdog)이 감시해서 제어하기에는 무겁지 않을까?
  • 4.
    bash에서 알고 넘어가야하는 사항 • $$ • POSIX에서 $$는 원본 프로세스의 프로세스 식별자 • $BASHPID • 배시 하위 셸 내부의 프로세스 식별자 • & • 배경 프로세스로 동작 • KILL • 프로세스에 시그널 전송 • TERM: 종료 시그널(해당 프로세스의 시그널 처리기에서 잡을 수 있음) • KILL: 강제 종료 시그널(init에서 프로세스 종료) • 모든 시그널 유형 보기 • $ kill -l
  • 5.
  • 6.
    스크립트 $ (cmdpid=$BASHPID; (echo$cmdpid; sleep 5; kill -TERM $cmdpid) & exec sleep 10) 10321 Terminated $ cat - > timeout.sh #!/bin/sh (cmdpid=$$; (echo $cmdpid; sleep 5; kill -TERM $cmdpid) & exec sleep 10) <CTRL+D> $ chmod +x timeout.sh $ ./timeout.sh 10329 Terminated 명령행에서 직접 실행 스크립트로 만든 다음에 실행
  • 7.