Quick Reference
ps aux
ps -ef
pgrep -af nginx
top
kill 1234
kill -TERM 1234
kill -KILL 1234| 목적 | 명령 |
|---|---|
| 전체 프로세스 목록 | ps aux 또는 ps -ef |
| 이름으로 PID 찾기 | pgrep -af <name> |
| 실시간 CPU/메모리 관찰 | top |
| 정상 종료 요청 | kill <pid> 또는 kill -TERM <pid> |
| 강제 종료 | kill -KILL <pid> |
| 현재 사용자 프로세스 확인 | ps -u "$USER" |
프로세스 확인
Linux에서 실행 중인 프로그램은 프로세스이고, 각 프로세스는 PID를 가집니다. ps는 특정 시점의 프로세스 목록을 보여 주고, top은 CPU와 메모리 사용량을 실시간으로 갱신합니다. 문제가 되는 프로세스를 찾을 때는 이름, PID, 사용자, CPU/메모리 사용량을 함께 봅니다.
ps aux | grep nginx
pgrep -af nginx
topgrep으로 찾으면 grep 프로세스 자체가 결과에 섞일 수 있습니다. 이름 검색이 목적이면 pgrep -af가 더 직접적입니다.
kill은 프로세스를 죽이는 명령이라기보다 signal을 보내는 명령이다
kill <pid>의 기본 signal은 보통 TERM입니다. 이는 프로세스에게 정상 종료 기회를 줍니다. 로그 flush, 연결 종료, 임시 파일 정리 같은 마무리를 할 수 있습니다. KILL은 커널이 강제로 종료시키므로 프로세스가 정리 코드를 실행할 수 없습니다.
kill -TERM 1234
sleep 2
kill -KILL 1234D 상태는 보통 uninterruptible I/O 대기라 signal을 보내도 I/O가 돌아올 때까지 끝나지 않을 수 있습니다. 이때는 storage, NFS, kernel log처럼 I/O 원인을 먼저 봅니다. Z(zombie)는 이미 종료됐지만 부모가 종료 상태를 회수하지 않은 항목이라 kill할 대상이 아닙니다. 부모 process가 wait하도록 고치거나 부모 종료·재시작 정책을 확인해야 합니다.
systemd가 관리하는 서비스는 직접 kill하기보다 systemctl stop 또는 restart로 관리자가 상태를 갱신하게 합니다. unit의 Restart= 정책이 있으면 직접 죽인 process를 systemd가 다시 띄울 수 있습니다. 정말 signal이 필요할 때도 systemctl kill처럼 unit 범위를 명시하고 영향받는 child process를 먼저 확인합니다.
선택 기준
| 상황 | 선택 |
|---|---|
| 프로세스가 무엇인지 확인 | ps aux, pgrep -af |
| 자원 사용량 확인 | top |
| 정상 종료 요청 | kill -TERM |
| 멈춰서 반응하지 않음 | 마지막 수단으로 kill -KILL |
| 서비스 프로세스 관리 | systemctl 우선 |
D 상태로 멈춤 | I/O·mount·kernel log 확인 |
Z 상태가 남음 | 부모 process와 reaping 확인 |
| 같은 이름 프로세스가 많음 | PID와 command line 확인 |
주의할 점
systemd가 관리하는 서비스 프로세스를 직접 kill하면 service manager가 다시 띄우거나 상태 추적이 꼬일 수 있습니다.
서비스는 먼저 systemctl stop, restart, status로 다루십시오.
systemctl status nginx
sudo systemctl restart nginx참고 링크
2 sources