본문 바로가기
C.W.K.
Stream
Lesson 10 of 10 · published

시그널 심화와 watch

~10 min · signal, trap, watch

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

먼저 알아둘 신호

  • SIGTERM (15): 정상 종료를 요청해. kill의 기본 신호야.
  • SIGINT (2): 사용자가 Ctrl+C를 눌렀다는 뜻이야.
  • SIGHUP (1): 터미널 연결 종료를 알리거나, 관례에 따라 설정을 다시 읽으라는 신호로 쓰여.
  • SIGKILL (9): 즉시 종료하며 프로세스가 잡을 수 없어.
  • SIGSTOP / SIGCONT: 프로세스를 강제로 멈추거나 다시 실행해. SIGSTOP은 프로세스가 잡거나 무시할 수 없어.
  • SIGUSR1 / SIGUSR2: 의미를 애플리케이션이 정하므로 보내기 전에 해당 문서를 확인해.
  • SIGPIPE (13): 쓰던 파이프의 읽는 쪽이 닫혔음을 알려.

스크립트에서 신호 잡기: trap

trap 'echo "caught Ctrl+C"; cleanup; exit 130' INT
trap 'rm -f /tmp/lock' EXIT
trap '' HUP            # 이 스크립트는 SIGHUP 무시

EXIT 트랩은 셸이 처리할 수 있는 종료 경로의 정리를 한곳에 모아. SIGKILL, 전원 차단, 커널 장애 뒤에는 실행되지 않으므로 정리 함수는 여러 번 불러도 안전해야 하고 오래된 상태도 다음 실행에서 복구할 수 있어야 해.

watch로 명령 반복하기

watch -n 1 'ls -lah | head'는 명령을 1초마다 다시 실행하고 최신 출력을 보여 줘. 큐 크기, 로그 줄 수, 파일 크기처럼 짧은 간격의 변화를 볼 때 편해. macOS에는 기본으로 없으므로 필요하면 brew install watch로 설치해.

watch 플래그

  • -n 5: 반복 간격을 5초로 정해.
  • -d: 직전 출력과 달라진 부분을 강조해.
  • -c: 출력의 ANSI 색 코드를 해석해.
  • -x: 셸을 거치지 않고 인자를 그대로 실행해.

가장 작은 관찰 루프

watch -n 2 -d 'ls -lh /var/log/build.log'

긴 작업 중 결과 파일의 크기와 수정 시각이 바뀌는지 가볍게 확인할 수 있어. 파일이 커진다는 사실만으로 내용이 정상이라고 판단하지 말고 종료 상태와 오류 로그도 함께 봐. 필요하면 tail -f로 실제 내용을 따로 확인해.

번호 대신 신호 이름을 써

모든 신호 번호가 플랫폼 사이에서 같지는 않아. 스크립트와 문서에는 -TERM, -HUP처럼 이름을 쓰고 대상 머신의 kill -l로 실제 목록을 확인해.

watch는 관찰만 해

비싼 명령을 너무 짧은 간격으로 반복하면 장애가 난 시스템에 부하를 더할 수 있어. 먼저 한 번 실행하는 비용을 재고 변화 속도에 맞는 간격을 골라. 자동 복구, 알림, 재시작 정책이 필요하다면 watch 화면이 아니라 그 책임을 가진 모니터링 서비스를 설계해야 해.

Code

트랩 패턴·bash
#!/usr/bin/env bash
set -euo pipefail
lock=/tmp/myjob.lock
trap 'rm -f "$lock"' EXIT INT TERM
echo $$ > "$lock"
# 실제 작업
sleep 30

External links

Exercise

EXIT 트랩이 정리 메시지를 남기는 작은 스크립트를 만들고 정상 종료와 Ctrl+C 중단에서 모두 실행되는지 확인해. 이어서 watch로 시험 디렉터리를 관찰하되, SIGKILL처럼 트랩이 실행될 수 없는 경우에는 어떤 상태가 남는지도 생각해 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.