종료는 이름이 잘못됨
kill은 프로세스를 직접 없애는 명령이 아니라 신호를 보내. 기본 신호인 SIGTERM은 종료를 요청하며 프로그램이 핸들러를 두었다면 정리할 시간을 가질 수 있어. SIGKILL은 프로세스가 가로채거나 무시할 수 없으므로 운영체제가 즉시 중단해.
쓰게 될 시그널
kill PID: 기본값은 SIGTERM이야. 프로그램에 종료를 요청해.kill -INT PID: SIGINT. Ctrl+C와 동일.kill -HUP PID: SIGHUP. 많은 데몬이 '재시작 없이 설정 다시 불러오기' 신호로 처리.kill -USR1 PID: 앱 정의. nginx가 로그 rotation 신호로 사용.kill -KILL PID또는kill -9 PID: SIGKILL. 강제 종료, 정리 없음. 최후의 수단.kill -STOP PID/-CONT: 일시정지 / 재개 (Ctrl+Z +fg와 유사).
이름으로 종료
pkill firefox
pkill -f 'python myscript.py' # 전체 명령줄과 일치
killall Slack # macOS GUI 앱단계적으로 종료 강도를 높여
kill PID: 먼저 SIGTERM으로 정상 종료를 요청해.- 5~10초 기다려. SIGTERM을 처리하는 프로그램이라면 이 안에 종료할 수 있어.
kill -KILL PID: SIGTERM 무시했을 때만.
처음부터 -9를 쓰면 프로그램은 버퍼를 비우거나 임시 상태를 정리할 기회를 잃어. 먼저 SIGTERM을 보내고 상태 변화를 확인해. 그래도 멈추지 않고 영향이 계속되는 프로세스에 한해 SIGKILL을 마지막 수단으로 써.
신호를 보냈다고 끝난 것은 아니야
kill이 성공했다는 것은 커널이 요청을 받아들였다는 뜻이지 프로세스가 이미 종료됐다는 뜻은 아니야. SIGTERM 핸들러가 정리를 오래 할 수도 있고, 권한이 없으면 신호 자체가 거부될 수 있어. kill -0 PID와 서비스 상태, 로그를 함께 확인해.
프로세스 하나와 서비스 하나는 달라
감시 프로세스가 자식을 다시 띄우는 구조에서는 PID 하나를 종료해도 서비스가 복구돼. 장애를 멈추려면 launchd, systemd, 컨테이너 오케스트레이터처럼 생명주기를 소유한 층에서 중지해야 해. ‘무엇을 죽일까’보다 ‘누가 다시 살리는가’를 먼저 찾는 편이 빨라.