개요
리눅스 시스템 관리와 트러블슈팅의 기본은 현재 실행 중인 프로세스를 정확히 파악하는 것입니다. 본 가이드에서는 필수 프로세스 모니터링 명령어인 ps의 동작 원리와 핵심 옵션을 단계별로 알아봅니다. 실무에서 가장 빈번하게 사용하는 ps aux, ps -ef의 차이점부터 특정 프로세스 필터링 및 리소스 정렬 팁까지 터미널 실습을 통해 마스터할 수 있습니다.
1. 현재 셸 프로세스 확인과 기본 ps 명령어 사용법
ps 명령어는 현재 실행 중인 프로세스의 상태를 확인하는 가장 기본적인 시스템 모니터링 도구입니다.
아무 옵션 없이 실행하면 현재 터미널 세션에 연결되어 동작 중인 프로세스 목록을 간략히 출력합니다.
결과에서는 프로세스 고유 식별자인 PID, 연결된 터미널 번호를 나타내는 TTY, 누적 CPU 사용 시간인 TIME, 그리고 실행된 명령어 이름인 CMD 항목을 확인할 수 있습니다.
⚙️ [주요 옵션]
-e, -A : 시스템에서 실행 중인 모든 프로세스를 조회합니다.-f : UID, PID, PPID 등을 포함하여 전체 포맷(Full-format)으로 상세 정보를 표시합니다.-u : 특정 사용자의 프로세스를 조회하거나 사용량 중심의 포맷으로 출력합니다.-ef : 모든 프로세스를 상세한 포맷으로 한눈에 파악할 때 널리 사용하는 표준 옵션 조합입니다.aux : BSD 스타일 옵션으로, 시스템 내 모든 프로세스의 CPU 및 메모리 점유율을 포함해 상세히 확인합니다.-p : 특정 프로세스 ID(PID)를 지정하여 해당 프로세스 정보만 선별 조회합니다.

ps -f 명령어는 프로세스 정보를 전체 포맷(Full-format) 형태로 확장하여 상세하게 출력합니다.
기본 출력 항목 외에 프로세스를 실행한 사용자 계정(UID), 부모 프로세스의 식별 번호(PPID), 프로세스가 시작된 시간(STIME), 그리고 실행 시 사용된 전체 실행 경로와 인자값을 함께 제공합니다.
특히 PPID를 통해 어떤 프로세스가 자식 프로세스를 생성했는지 계층 관계를 추적할 때 유용하게 활용됩니다.

2. BSD 스타일의 표준: ps aux로 시스템 전체 프로세스 조회하기
ps aux 명령어는 BSD 스타일 문법을 사용하여 시스템에서 동작 중인 모든 사용자의 프로세스를 상세하게 조회합니다.
출력 결과가 많을 수 있으므로 head -n 15 파이프라인을 연결하여 상위 15개 항목만 선별해 출력했습니다.
결과 항목 중 USER는 실행 소유자, %CPU와 %MEM은 각각 CPU 및 메모리 점유율을 나타냅니다.VSZ는 가상 메모리 크기(KB), RSS는 실제 점유 중인 물리 메모리 크기(KB)를 의미합니다.STAT 컬럼은 프로세스의 현재 동작 상태(실행 중 R, 인터럽트 가능 대기 S, 세션 리더 s 등)를 상세 코드로 보여줍니다.
또한 START는 시작 시간, TIME은 CPU 사용 누적 시간, COMMAND는 프로세스를 실행한 전체 명령어를 나타냅니다.

3. 표준 UNIX/POSIX 스타일: ps -ef로 프로세스 부모-자식 관계 추적하기
ps -ef 명령어는 표준 UNIX/POSIX 스타일 문법을 사용하여 시스템 내 모든 프로세스를 전체 상세 포맷으로 출력합니다.
출력 결과가 화면을 넘어가지 않도록 head -n 15 명령어를 조합하여 상위 15개 항목을 확인했습니다.
출력 컬럼 중 UID는 프로세스를 소유한 사용자 계정, PID는 고유 식별 번호, PPID는 부모 프로세스의 식별 번호를 나타냅니다.
또한 C는 CPU 점유율 수치, STIME은 시작 시각, TTY는 제어 터미널, TIME은 총 CPU 소비 시간, CMD는 실행된 명령어와 인자값을 보여줍니다.
특히 PID와 PPID를 비교하여 프로세스가 생성된 계층적 연결 관계를 명확히 파악할 수 있습니다.

ps -ef --forest 명령어는 전체 프로세스 목록을 부모-자식 관계에 맞추어 계층적 트리 구조로 시각화하여 출력합니다.
방대한 출력량 중 상위 프로세스들의 트리 구조를 빠르게 확인하기 위해 head -n 20 파이프라인을 연결했습니다.CMD 항목에서 \_ 기호와 들여쓰기를 통해 어떤 프로세스가 부모 프로세스로부터 파생된 자식 프로세스인지 직관적으로 확인할 수 있습니다.
이러한 트리 뷰는 특정 백그라운드 작업이나 데몬 프로세스의 종속 관계 및 실행 경로를 추적할 때 매우 유용합니다.

4. 실무 필수 테크닉: 특정 프로세스 검색 및 리소스별 정렬
특정 프로세스 검색 및 정렬 실습을 진행하기 위해 sleep 300 & 명령어로 300초 동안 대기하는 백그라운드 프로세스를 생성합니다.

ps aux | grep [s]leep 명령어는 실행 중인 프로세스 목록에서 대괄호 표현식을 사용하여 grep 프로세스 자체를 검색 결과에서 제외하고 실제 sleep 프로세스만 정확히 필터링합니다.
출력 결과를 통해 방금 실행한 sleep 300 작업의 PID(173), 상태(S), 시작 시간 등 상세 실행 정보를 깔끔하게 확인할 수 있습니다.
![ps aux | grep [s]leep](/ubuntu/20261009_013732_15/captures/s04_c02_ps_aux___grep__s_leep.png)
ps aux --sort=-%mem 명령어는 메모리 점유율(%MEM)을 기준으로 내림차순 정렬하여 메모리를 가장 많이 사용하는 상위 프로세스를 선별합니다.
출력 결과가 많으므로 head -n 10 파이프라인을 연결하여 시스템 내에서 메모리 사용량이 높은 상위 10개 프로세스 목록을 신속하게 파악할 수 있습니다.

ps aux --sort=-%cpu 명령어는 CPU 점유율(%CPU)을 기준으로 내림차순 정렬하여 CPU 자원을 가장 많이 소모하는 프로세스 순으로 정렬합니다.head -n 10 명령어를 함께 조합하여 현재 시스템에서 CPU 부하를 유발하는 핵심 프로세스들을 한눈에 확인하고 리소스 병목을 진단할 수 있습니다.

실습이 끝난 후 시스템 리소스를 정리하기 위해 pkill sleep 명령어를 실행하여 백그라운드에서 동작 중이던 sleep 프로세스를 종료합니다.

지금까지 리눅스 환경에서 프로세스를 관리하고 모니터링하기 위한 ps 명령어의 핵심 옵션과 실무 파이프라인 활용법을 자세히 살펴보았습니다.
오늘 정리한 명령어 조합들을 실무 트러블슈팅과 서버 모니터링에 적극 활용해 보시기 바랍니다.