본문 바로가기
인프라 (Infrastructure)/운영체제 (OS)

리눅스 ps 명령어 사용법 및 실제 활용 예시 (프로세스 확인 방법)

by IT 성능 전문 블로그 2025. 9. 5.
반응형

안녕하세요.

 

루디쿡 아이티입니다~!!

 

이번에 소개드릴 리눅스의 핵심 기술은 바로

내 컴퓨터의 모든 일꾼을 확인하는 명령어,

ps 입니다!!


ps 란?

ps는 'Process Status'의 약자로,

이름 그대로 현재 시스템에서 실행 중인

프로세스들의 상태를 보여주는 명령어입니다.

 

컴퓨터의 두뇌(CPU)가 처리하고 있는 모든 작업들을

목록으로 보여주는 '디지털 인구 조사'와 같습니다. 🤵‍♂️🤵‍♀️

살아있는 역사, ps의 탄생

ps는 무려 1973년, 유닉스(Unix) 버전 4 시절에 탄생한,

그야말로 '살아있는 화석' 같은 명령어입니다.

유닉스의 창시자 중 한 명인 켄 톰슨(Ken Thompson)이 직접 개발했죠.

"하나의 도구는 하나의 작업만 잘해야 한다"는 유닉스 철학에 따라,

'프로세스 상태를 보여주는'

단 하나의 임무에만 집중하도록 아주 단순하게 설계되었습니다.

두 개의 가문: BSD 와 System V

그런데 이 ps가 오랜 세월을 거치며 두 개의 큰 가문으로 나뉘게 됩니다.

당시 유닉스 연구의 양대 산맥이었던 'BSD 가문'과 'System V 가문'이죠.

구분 BSD 가문 (UC Berkeley) System V 가문 (AT&T)
개발 주체 버클리 캘리포니아 대학 AT&T (유닉스 원조 개발사)
옵션 스타일 하이픈(-)을 붙이지 않음 하이픈(-)을 붙임
대표 명령어 ps aux ps -ef
정보 중심 사용자 중심 (CPU, 메모리 등 자원 점유율) 프로세스 관계 중심 (부모-자식 관계)

위대한 통합: Linux의 ps

그럼 우리가 쓰는 리눅스의 ps는 어느 가문일까요?

정답은 "둘 다 지원한다" 입니다! 😄

 

리눅스를 만든 개발자들은 이런 스타일 차이로 인한 혼란을 막고 호환성을 높이기 위해,

두 가문의 스타일을 모두 지원하도록 ps 명령어를 만들었습니다.

덕분에 우리는 ps aux와 ps -ef라는 강력한 두 가지 무기를 모두 사용할 수 있게 된 것이죠.


ps 핵심 옵션 조합 (aux vs -ef)

ps는 단독으로 쓰이기보다는 옵션과 함께 사용될 때 진정한 힘을 발휘합니다.

가장 널리 쓰이는 두 가지 조합은 BSD 스타일의 aux와 System V 스타일의 -ef 입니다.

옵션 조합 스타일 특징
ps aux BSD 사용자 중심(user-oriented)으로, 어떤 사용자가 어떤 프로세스를 실행 중인지, CPU와 메모리 점유율은 얼마인지 등을 자세히 보여줍니다.
ps -ef System V 프로세스 간의 관계 중심(process-hierarchy)으로, 어떤 프로세스가 다른 프로세스를 실행시켰는지 부모-자식 관계(PPID)를 명확하게 보여줍니다.
 

두 조합 모두 시스템의 모든 프로세스를 보여준다는 점은 동일하지만,

출력되는 정보의 형태가 달라 목적에 맞게 사용합니다.

 

보통 시스템 자원 현황을 볼 땐 aux를,

프로세스의 동작 구조를 볼 땐 -ef를 많이 사용합니다.


핵심 옵션 낱낱이 파헤치기

ps aux와 ps -ef는 사실 아래의 기본 옵션들을 조합하여 만들어진 것입니다.

각 옵션이 어떤 보물을 찾아오는지 알아볼까요?

옵션 의미 설명
a all 현재 터미널에 연결된 모든 사용자의 프로세스를 보여줍니다. (자기 자신 + 다른 사용자)
x (external) 터미널에 연결되지 않은, 즉 백그라운드에서 조용히 실행 중인 모든 프로세스까지 보여줍니다. (데몬, 서비스 등)
u user-oriented 프로세스 소유자, CPU/메모리 사용량, 프로세스 상태 등 사용자가 보기 편한 형식으로 자세한 정보를 보여줍니다.
e every 시스템에서 실행 중인 모든 프로세스를 보여줍니다. BSD 스타일의 ax와 같은 역할을 합니다.
f full-format 프로세스 간의 부모-자식 관계를 트리 구조처럼 보여줍니다. 어떤 프로세스가 다른 프로세스를 실행시켰는지 한눈에 파악하기 좋습니다.

옵션 조합의 비밀

이제 이 옵션들을 조합하면 그 의미가 명확해집니다.

  • ps aux = a (모든 사용자의) + x (백그라운드 포함 모든) 프로세스를 u (사용자 친화적인 상세 정보) 형식으로 보여줘!
  • ps -ef = e (시스템의 모든) 프로세스를 f (부모-자식 관계를 포함한 전체) 형식으로 보여줘!

이처럼 각 옵션의 의미를 이해하면,

ps u (내 프로세스만 자세히 보기),

ps ax (모든 프로세스 간단히 보기) 등

상황에 맞게 명령어를 직접 조합해서 사용할 수 있게 됩니다.


ps aux 출력 결과 완전 정복

ps aux 명령어의 결과는 여러 컬럼으로 구성되어 있습니다.

각 컬럼이 무엇을 의미하는지 알면 시스템을 정확히 진단할 수 있습니다.

컬럼 설명
USER 프로세스를 실행시킨 사용자 계정
PID 프로세스 고유 ID (Process ID). 프로세스를 식별하는 가장 중요한 번호입니다.
%CPU 프로세스가 사용하고 있는 CPU의 점유율
%MEM 프로세스가 사용하고 있는 물리적 메모리(RAM)의 점유율
VSZ 프로세스가 사용 중인 가상 메모리의 크기 (KB 단위)
RSS 프로세스가 사용 중인 실제 물리적 메모리의 크기 (KB 단위)
TTY 프로세스가 연결된 터미널 정보. ?는 터미널과 연결되지 않은 백그라운드 프로세스입니다.
STAT 프로세스의 현재 상태. (S: 대기, R: 실행, Z: 좀비 등)
START 프로세스가 시작된 시간
TIME 프로세스가 시작된 후 사용한 총 CPU 시간
COMMAND 실행된 명령어 또는 프로그램의 전체 경로
 

ps 실제 예시

ps는 보통 grep과 같은 다른 명령어와 조합하여 원하는 정보만 필터링해서 봅니다.

예시 1: 특정 프로그램(chrome)이 얼마나 많은 자원을 쓰는지 확인하기

구분 내용
🎯 목표 현재 실행 중인 chrome 브라우저 프로세스들을 찾아 CPU와 메모리 사용량 확인하기
⌨️ 전체 명령어 ps aux | grep chrome
뜯어보기 (명령어 분석) ps aux로 모든 프로세스 정보를 출력하고, 그 결과를 파이프(`
✨ 실행 결과 ✨ 아래 확인!!
 
 
roody    12345  4.5  2.1 2345678 178912 ?   Sl   14:10   2:30 /opt/google/chrome/chrome ...
roody    12389  0.8  1.5 1890123 123456 ?   S    14:10   0:15 /opt/google/chrome/chrome --type=gpu-process ...
roody    12456  2.1  3.0 2012345 245678 ?   R    14:11   1:12 /opt/google/chrome/chrome --type=renderer ...

 

🕵️‍♂️ 결과 분석 | chrome이라는 이름으로 여러 개의 프로세스가 실행되고 있으며,

각각의 CPU(%CPU) 및 메모리(%MEM) 사용량을 확인할 수 있습니다.

시스템이 느려질 때 어떤 프로그램이 자원을 많이 사용하는지 찾는 가장 기본적인 방법입니다.

예시 2: 특정 서비스(sshd)가 실행 중인지 확인하고 PID 찾기

구분 내용
🎯 목표 원격 접속 서비스인 sshd가 정상적으로 실행 중인지 확인하고, 해당 프로세스의 PID 찾아보기
⌨️ 전체 명령어 ps -ef | grep sshd
뜯어보기 (명령어 분석) ps -ef로 전체 포맷의 프로세스 목록을 출력하고, 파이프하여 sshd 확인
✨ 실행 결과 ✨ 아래 확인!!
root       1001      1  0 09:30 ?        00:00:00 /usr/sbin/sshd -D
roody     23456   1001  0 15:20 ?        00:00:00 sshd: roody@pts/0
roody     34567  12345  0 16:30 pts/1    00:00:00 grep --color=auto sshd

🕵️‍♂️ 결과 분석 | sshd 데몬 프로세스(PID 1001)가 root 권한으로 실행 중인 것을 확인할 수 있습니다.

이처럼 특정 서비스를 재시작하거나 종료(kill)해야 할 때,

ps와 grep으로 정확한 PID를 찾는 것이 첫 단계입니다.

 

(참고: 마지막 줄의 grep sshd는 검색을 위해 실행된 grep 명령어 자신이므로 무시해도 됩니다.)

예시 3: 시스템의 좀비(Zombie) 프로세스 찾아내기

구분 내용
🎯 목표 시스템에 문제를 일으킬 수 있는 좀비(Zombie) 프로세스 찾아보기
⌨️ 전체 명령어 ps aux | grep 'Z'
뜯어보기 (명령어 분석) ps aux 결과의 STAT(상태) 컬럼에 Z 또는 Z+로 표시된 프로세스를 grep으로 찾아냅니다.
✨ 실행 결과 ✨ 아래 확인!!
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     17890  0.0  0.0      0     0 ?        Z    14:55   0:00 [defunct]

🕵️‍♂️ 결과 분석 | 좀비 프로세스는 프로그램이 종료되었지만,

부모 프로세스가 제대로 처리하지 못해 시스템에 찌꺼기처럼 남아있는 상태입니다.

COMMAND가 [defunct]로 표시되는 특징이 있습니다.

좀비 프로세스 자체가 시스템 자원을 소모하진 않지만,

많이 쌓이면 프로세스 ID(PID)를 고갈시켜 시스템에 문제를 일으킬 수 있으므로

관리자는 이를 주기적으로 확인해야 합니다.

 


이것으로 시스템의 모든 작업을 손금 보듯 들여다볼 수 있는 ps 명령어에 대해 알아보았습니다.

리눅스 시스템 관리의 첫걸음은 ps로 현재 상태를

정확히 파악하는 것에서 시작됩니다!

 

 

앞으로도 좋은 글로 찾아뵙도록 하겠습니다.

IT 성능 전문가, IT를 전하는 루디쿡아이티였습니다!!

감사합니다~!!

 

 

 

반응형