기본 문법
ps [옵션]
ps(process status)는 현재 시스템에서 실행 중인 프로세스의 목록과 상태를 출력하는 명령어입니다. PID(프로세스 ID), 소유자, CPU·메모리 사용률, 실행 중인 명령줄 등을 확인할 수 있습니다. top이나 htop이 화면을 주기적으로 갱신하는 것과 달리, ps는 명령을 실행한 그 순간의 상태를 한 번만 출력합니다.
ps는 역사적 이유로 세 가지 옵션 형식을 함께 지원합니다. 하이픈이 없는 BSD 형식(ps aux), 하이픈을 붙이는 UNIX 형식(ps -ef), 하이픈 두 개를 붙이는 GNU 롱 형식(ps --sort)입니다. 형식에 따라 같은 문자의 의미가 달라지므로 한 가지 형식을 정해 쓰는 편이 안전합니다. 실무에서는 `ps aux`와 `ps -ef`가 가장 널리 쓰입니다.
실습에서는 특정 사용자나 명령 이름으로 프로세스를 찾아 PID를 알아내고, 그 PID를 kill로 종료하거나 renice로 우선순위를 바꾸는 흐름이 자주 사용됩니다. grep, awk, sort와 파이프로 연결해 필요한 열만 추출하는 활용이 핵심입니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
aux | 모든 사용자의 모든 프로세스를 BSD 형식으로 출력(USER·%CPU·%MEM·STAT 포함) | ps aux |
-ef | 모든 프로세스를 UNIX 전체 형식으로 출력(UID·PID·PPID 포함) | ps -ef |
-u 사용자 | 지정한 사용자의 유효 UID(EUID)로 실행 중인 프로세스만 출력 | ps -u root |
-U 사용자 | 지정한 사용자의 실제 UID(RUID)로 실행 중인 프로세스만 출력 | ps -U demo_user |
-p PID | 지정한 PID의 프로세스만 출력 | ps -p 1 |
-C 명령이름 | 실행 파일 이름으로 프로세스를 선택(부분 일치가 아닌 정확한 이름) | ps -C sleep |
-o 항목 | 출력할 열을 직접 지정(pid, ppid, ni, pri, user, %cpu, comm 등). 항목 뒤에 =를 붙이면 해당 열의 머리글이 사라짐 | ps -p 1 -o pid,ni,comm |
--sort 항목 | 지정한 열 기준으로 정렬(앞에 -를 붙이면 내림차순) | ps -eo pid,%cpu,comm --sort=-%cpu |
-f | 전체 형식(full) 출력, UID·PPID·시작 시각·명령줄 표시 | ps -f -u root |
--no-headers | 머리글 행을 출력하지 않음(스크립트에서 값만 추출할 때 사용) | ps -C sleep -o pid --no-headers |
실무 예시
전체 프로세스 목록 확인
$ ps aux | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 5016 1284 ? Ss 11:42 0:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 600
root 15 0.0 0.0 3668 2500 ? Ss 11:42 0:00 bash -c cd /tmp/demo 2>/dev/null || mkdir -p /tmp/demo && cd /tmp/demo ps aux | head -5
root 21 0.0 0.0 8624 3012 ? R 11:42 0:00 ps aux
root 22 0.0 0.0 5016 1224 ? S 11:42 0:00 /usr/bin/coreutils --coreutils-prog-shebang=head /usr/bin/head -5
모든 사용자의 프로세스를 소유자, CPU·메모리 사용률과 함께 출력합니다. 행이 많으므로 head로 앞부분만 확인합니다. COMMAND 열에는 실행 파일의 전체 경로와 인자가 그대로 표시되며, 컨테이너 환경에서는 coreutils 래퍼 경로가 함께 보일 수 있습니다.
특정 사용자의 프로세스만 보기
준비: useradd demo_user 2>/dev/null; runuser -u demo_user -- sleep 300 &
sleep 1
$ ps -U demo_user -o pid,user,%cpu,comm
PID USER %CPU COMMAND
38 demo_us+ 0.0 sleep
demo_user가 실제 소유자(RUID)인 프로세스만 골라 PID와 CPU 사용률을 확인합니다. 해당 사용자의 프로세스가 하나도 없으면 머리글만 출력되고 종료 코드는 1이 됩니다. USER 열은 폭이 8자로 제한되어 긴 이름은 `demo_us+`처럼 잘려 표시됩니다.
이름으로 프로세스 찾아 PID만 추출
준비: sleep 200 &
$ ps -C sleep -o pid=
1
38
45
명령 이름이 sleep인 프로세스의 PID만 머리글 없이 출력합니다. 조건에 맞는 프로세스가 여러 개면 여러 줄이 나오므로, 한 줄만 필요하면 `| head -1`을 덧붙이세요. 원본 초안의 `--no-headers`는 `-o pid=`와 기능이 겹쳐 생략했습니다.
CPU 사용률이 높은 순으로 정렬
$ ps -eo pid,user,%cpu,%mem,comm --sort=-%cpu | head -4
PID USER %CPU %MEM COMMAND
1 root 0.2 0.0 sleep
36 root 0.0 0.0 runuser
38 demo_us+ 0.0 0.0 sleep
CPU 사용률 내림차순으로 정렬해 상위 프로세스를 확인합니다. 부하를 유발하는 프로세스를 찾을 때 쓰는 기본 형태이며, 유휴 상태에서는 모든 값이 0.0에 가깝게 나옵니다.
우선순위(NI) 값 확인
준비: sleep 150 &
$ ps -C sleep -o pid,ni,pri,comm
PID NI PRI COMMAND
1 0 19 sleep
38 0 19 sleep
45 0 19 sleep
61 0 19 sleep
프로세스의 나이스 값(NI)과 우선순위(PRI)를 확인합니다. 기본값은 NI 0이며, 이때 ps가 표시하는 PRI는 19입니다. nice로 값을 지정해 실행했거나 renice로 변경한 뒤 결과를 검증할 때도 같은 명령을 사용하되, 대상 프로세스의 PID를 `-p PID`로 직접 지정하면 확실합니다.
주의할 점
- ps aux와 ps -ef는 형식이 다릅니다. BSD 형식(aux)에는 하이픈을 붙이지 않고, UNIX 형식(-ef)에는 붙입니다.
- ps -ef | grep 이름 은 grep 프로세스 자신도 함께 걸립니다. grep -v grep 을 붙이거나 pgrep을 쓰세요.
- -u는 유효 UID(EUID), -U는 실제 UID(RUID) 기준입니다. 실제 소유자로 찾으려면 -U를 사용하세요.
- 선택 조건에 맞는 프로세스가 하나도 없으면 ps는 종료 코드 1을 반환합니다. 스크립트에서 set -e와 함께 쓸 때 주의하세요.
- -C는 명령 이름이 정확히 일치해야 선택됩니다. 컨테이너에서는 PID 1이 sleep 같은 일반 명령일 수 있어 예상보다 많은 행이 나올 수 있습니다.
- ps의 %CPU는 프로세스 수명 전체의 평균값입니다. 현재 순간의 부하는 top으로 확인하세요.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
