
서버나 개발 환경에서 프로그램이 멈추거나 서비스가 응답하지 않을 때, 재부팅부터 하기 전에 프로세스 상태와 서비스 로그를 먼저 확인하는 편이 안전합니다. 아래 명령어는 systemd를 사용하는 Ubuntu 24.04 LTS 기준이며, 대부분 다른 systemd 기반 배포판(Debian, RHEL 계열 등)에서도 동일하게 동작합니다(2026년 8월 25일 확인).
빠른 결론
1. 실행 중인 프로세스와 리소스 사용량은 ps aux 또는 top으로 확인합니다.
2. 응답 없는 프로세스는 kill(기본 TERM)을 먼저 시도하고, 안 되면 kill -9로 강제 종료합니다.
3. systemd 서비스 상태·로그는 systemctl status·journalctl -u로 확인합니다.
자주 쓰는 프로세스·모니터링 명령어 15개
| 분류 | 명령어 | 설명·예시 |
| 프로세스 확인 | ps aux | 전체 프로세스를 사용자·CPU·메모리와 함께 표시 |
| pgrep -a nginx | 이름으로 프로세스의 PID와 명령줄 검색 | |
| top | CPU·메모리 사용량을 실시간으로 표시, q로 종료 | |
| 종료 | kill PID | 기본 TERM 신호로 정상 종료 요청 |
| kill -9 PID | KILL 신호로 강제 종료(최후 수단) | |
| 서비스(systemd) | systemctl status 서비스명 | active·inactive·failed 등 현재 상태 확인 |
| sudo systemctl start/stop 서비스명 | 서비스 시작·중지 | |
| sudo systemctl restart 서비스명 | 서비스 재시작 | |
| sudo systemctl enable 서비스명 | 부팅 시 자동 시작 등록 | |
| 로그 | journalctl -u 서비스명 | 해당 서비스의 systemd 저널 로그 조회 |
| journalctl -f -u 서비스명 | 로그를 실시간으로 이어서 보기 | |
| 리소스 | free -h | 메모리·스왑 사용량을 사람이 읽기 쉬운 단위로 표시 |
| uptime | 가동 시간과 최근 1·5·15분 부하 평균 확인 | |
| 네트워크 | ss -tuln | 열려 있는 TCP·UDP 포트 목록 확인(netstat 대체) |
| curl -I 주소 | 응답 헤더만 받아 서비스 응답 여부 확인 |
실습 전 체크리스트
- systemctl start·stop·restart는 대부분 sudo 권한이 필요합니다.
- 실습용으로 테스트해도 안전한 서비스(예: ssh, cron)를 미리 정해둡니다.
- 운영 중인 서버라면 재시작 전 접속자·작업 중인 프로세스가 있는지 먼저 확인합니다.
- kill 대상 PID는 ps나 pgrep으로 다시 한번 확인한 뒤 실행합니다.
실전 예제로 따라 하기
- 전체 프로세스를 확인합니다.
ps aux | less를 입력해 목록을 보고 q로 빠져나옵니다. - 특정 프로세스를 검색합니다.
ps aux | grep [s]sh처럼 첫 글자를 대괄호로 감싸면 grep 자기 자신이 결과에 잡히지 않습니다. - 실시간 사용량을 봅니다.
top을 실행하고 Shift+P로 CPU 사용량 순 정렬, Shift+M으로 메모리 사용량 순 정렬 후 q로 종료합니다. - PID를 확인합니다.
pgrep -a 프로세스명으로 정확한 PID와 실행 명령줄을 확인합니다. - 정상 종료를 시도합니다.
kill PID를 입력하고ps -p PID로 종료됐는지 확인합니다. - 안 되면 강제 종료합니다.
kill -9 PID는 저장되지 않은 작업이 사라질 수 있으므로 마지막 수단으로만 사용합니다. - 서비스 상태를 확인합니다.
systemctl status ssh로 active(running) 상태인지 확인합니다. - 서비스를 재시작합니다.
sudo systemctl restart ssh실행 후 다시 status로 정상 기동을 확인합니다. - 로그와 포트를 점검합니다.
journalctl -u ssh --since "10 min ago"로 최근 로그를 보고,ss -tuln으로 해당 서비스 포트가 열려 있는지 확인합니다.
주의사항
kill -9는 프로세스가 정리 작업 없이 즉시 종료되므로 저장되지 않은 데이터가 사라질 수 있습니다. 운영 서버에서 systemctl restart는 짧게라도 서비스 중단(다운타임)을 일으키므로 접속자가 많은 시간대는 피하는 것이 좋습니다. sudo가 필요한 명령은 실행 전 대상 서비스명·PID를 다시 확인하세요.
해결되지 않을 때 추가 점검
- netstat이 없다면 최신 배포판은 기본 제공하지 않으므로
ss를 사용하거나 net-tools 패키지를 설치합니다. - systemctl 명령이 없다면 systemd를 쓰지 않는 배포판(Alpine 등 OpenRC 계열)일 수 있습니다.
- journalctl에 로그가 안 보이면 저널 보존 설정(Storage=persistent)이나 로그 보존 기간을 확인합니다.
- 디스크 용량 부족으로 로그가 안 쌓이는 경우도 있으므로 df -h로 남은 용량도 함께 확인합니다.
FAQ
1. kill과 kill -9의 차이는 무엇인가요?
기본 kill은 TERM 신호를 보내 프로세스가 스스로 정리 후 종료하도록 요청하고, kill -9는 KILL 신호로 즉시 강제 종료해 정리 작업을 건너뜁니다.
2. top 대신 htop을 써도 되나요?
네, htop은 별도 설치가 필요하지만 색상·마우스 지원 등 사용성이 더 좋고 기능은 top과 비슷합니다.
3. systemctl 대신 service 명령어를 써도 되나요?
구버전 호환용으로 남아 있지만 systemd 배포판에서는 더 많은 정보를 주는 systemctl 사용이 권장됩니다.
관련 글
Linux 디스크 용량 부족 해결: df·du·journalctl로 원인 찾고 정리하기
WSL2 메모리·디스크 용량 과다 사용 줄이기: .wslconfig 설정과 ext4.vhdx 관리
윈도우 리눅스 듀얼부팅 시간 어긋남 해결: RTC·UTC 설정 통일 방법
댓글