ps (유닉스)


개요

ps(process status)는 유닉스 계열 운영체제에서 현재 실행 중인 프로세스들의 정보를 조회하기 위한 표준 명령어이다. 프로세스 ID(PID), 부모 프로세스 ID(PPID), 실행 상태, CPU·메모리 사용량, 실행 시간, 사용자명 등 다양한 속성을 한눈에 볼 수 있다. ps는 시스템 관리, 디버깅, 성능 분석 등에 필수적인 도구이며, 대부분의 POSIX 호환 쉘에서 기본 제공된다.

역사

  • 1970년대 초: 최초의 ps 유틸리티는 AT&T UNIX Version 7에 포함돼 있었으며, 단순히 현재 터미널에 연결된 프로세스 목록만을 보여주었다.
  • 1980년대: BSD 계열은 ps에 포맷 지정 옵션(-o)과 전체 시스템 프로세스 표시(-A) 등을 추가해 기능을 확대하였다.
  • 1990년대 이후: GNU 프로젝트는 procps 패키지를 통해 리눅스에서 사용되는 ps 구현을 제공했으며, 이후 procps-ng 로 발전하였다. 현재 ps는 POSIX 표준에 정의된 최소한의 옵션을 포함하면서도 각 구현체마다 추가 옵션을 제공한다.

기본 사용법

ps [options]

옵션을 지정하지 않으면 현재 터미널에 연결된 프로세스만 출력한다.

예시

  • ps : 현재 셸과 그 자식 프로세스만 표시
  • ps -e 또는 ps -A : 시스템 전체 프로세스를 표시
  • ps -u 사용자명 : 지정된 사용자의 프로세스만 표시

주요 옵션

옵션 의미 비고
-e, -A 모든 프로세스 표시
-u <user> 사용자별 필터링 -U는 실효 사용자, -u는 실제 사용자
-f 풀 포맷 (PPID, UID, C, STIME, CMD 등)
-l 긴 포맷 (PRI, NI, SZ, RSS 등)
-j 작업 제어 포맷 (PGID, SID 등)
-o <format> 출력 형식 지정 (예: pid,ppid,comm) 콤마 구분, = 로 별명 지정 가능
-p <pid> 특정 PID만 표시 복수 PID는 콤마 혹은 스페이스로 구분
-C <cmd> 명령어 이름으로 필터링
-H 트리 구조(계층)로 표시 --forest와 동일
-r 실행 중인(Running) 프로세스 먼저 정렬
-S 메모리 사용량 순 정렬
--sort <key> 지정 키로 정렬 (예: --sort=-%cpu) - 부호는 내림차순

출력 형식

ps는 기본적으로 다음과 같은 컬럼을 제공한다.

컬럼 설명
PID Process ID
TTY 터미널(또는 ? for non‑terminal)
TIME 누적 CPU 사용 시간
CMD 실행 명령(전체 경로 또는 인자 포함)

-f 옵션을 사용하면 UID, PPID, C(CPU 사용 비율), STIME(시작 시간) 등을 추가한다. -o 옵션을 통해 사용자는 원하는 컬럼만 선택하고, 별명을 지정할 수 있다.

확장 기능 및 구현체 차이

  • procps / procps-ng(Linux) : /proc 파일시스템을 직접 읽어 구현. ps -eo 등 복합 옵션 지원이 풍부.
  • BSD ps : kvm 인터페이스를 사용하며, -J(jobs) 같은 BSD 고유 옵션이 있다.
  • Solaris ps : -x 옵션을 기본으로 제공해 세션 리더가 아닌 프로세스도 표시.

각 구현체는 POSIX 표준 외에 고유 옵션을 제공하므로, 스크립트 이식성을 위해서는 최소한 POSIX 옵션(-e, -f, -o) 사용을 권장한다.

관련 명령

  • top, htop : 실시간 프로세스 모니터링
  • kill, pkill, killall : 프로세스 종료
  • nice, renice : 프로세스 우선순위 조정
  • pstree : 트리 형태로 프로세스 계층 구조 시각화

활용 예시

  1. CPU 사용량 상위 5개 프로세스 확인
    ps -eo pid,comm,%cpu --sort=-%cpu | head -n 6
    
  2. 특정 사용자의 메모리 사용량 정렬
    ps -u alice -o pid,comm,%mem --sort=-%mem
    
  3. 프로세스 트리 보기
    ps -ef --forest | grep nginx
    

참고 문헌

  1. POSIX.1-2017ps 명령어 표준 정의.
  2. procps-ng 매뉴얼 페이지man ps (Linux).
  3. The Unix Programming Environment, Brian W. Kernighan, Rob Pike, 1984.
  4. FreeBSD Handbookps 섹션.

외부 링크

둘러보기

더 찾아볼 만한 주제