먼저 알아둘 신호
- 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 화면이 아니라 그 책임을 가진 모니터링 서비스를 설계해야 해.