PS(1)

명칭
ps - 프로세스 상태의 표시

서식
ps [-aCcefhjlmrSTuvwx] [-M core] [-N system] [-O fmt] [-o fmt] [-p pid] [-t tty] [-U username]
ps [-L]

해설
ps 유틸리티는, 제어 단말을 가지는 자신 (당신)의 프로세스의 정보를, 헤더행에 이어 표시합니다. 이 정보는, 제어 단말순서에 정렬되어 그 중에서는 프로세스 ID 순서에 정렬됩니다.

표시되는 정보는, 일련의 키워드에 의해 선택됩니다 (-L, -O, -o 옵션을 참조). 디폴트의 출력 포맷은, 각 프로세스마다, 프로세스 ID, 제어 단말·cpu 시간 (유저 시간과 시스템 시간의 양쪽 모두)· 프로세스 상태·프로세스에 관련하는 명령로부터 완성됩니다.

프로세스 파일 시스템 ( procfs(5) 참조)는, ps 하지만 실행되고 있을 때에 mount 되고 있어야 합니다. 그렇지 않은 경우, 모든 정보가 이용 가능하게 되는 것은 아닙니다.

옵션을 이하에 나타냅니다.

-a  자신의 프로세스에 가세해 자신 이외의 프로세스의 정보도 이와 같이 표시합니다. 이 기능은, kern.ps_showallprocs sysctl 를 0 으로 설정하는 것으로 무효화할 수 있습니다.

-c  ``명령''자리수의 출력을, 모든 커멘드 라인을 표시하는 것이 아니라, 실행 형식명만을 표시하도록(듯이) 변경합니다.

-C  cpu 퍼센티지의 계산을,``상주''시간을 무시하는 ``생'' cpu 시간을 사용하는 방법으로 변경합니다 (통상 이것은 영향 없습니다).

-e  환경 (변수)도 동시에 표시합니다.

-f  스왚 아웃 된 프로세스에 관해서, 명령행과 환경의 정보를 표시합니다. 유저의 uid 가 0 인 경우만, 이 옵션이 유효하게 됩니다.

-h  페이지마다 1 개(살) 헤더가 들어가도록(듯이) 합니다.

-j  다음의 키워드에 관한 정보를 표시합니다: user, pid, ppid, pgid, sess, jobc, state, tt, time, command.

-L  유효한 키워드의 일람을 표시합니다.

-l  다음의 키워드에 관한 정보를 표시합니다: uid, pid, ppid, cpu, pri, nice, vsz, rss, wchan, state, tt, time, command.

-M  이름 리스트의 값을 꺼낼 때, 디폴트의 /dev/kmem 대신에, 지정했다 core (으)로부터 꺼냅니다.

-m  프로세스 ID 순서가 아니고, 메모리 사용량순서에 정렬합니다.

-N  디폴트의 /kernel 대신에, 지정되었다 system (으)로부터 이름 리스트를 꺼냅니다.

-O  디폴트로 표시되는 정보에 가세해 지정된 키워드에 관한 정보를, 프로세스 ID 의 후에 삽입하는 형식에서 표시합니다. 각 키워드의 뒤에는, 등호 (``='')와 캐릭터 라인을 추가해도 상관하지 않습니다. 이 경우, 표준의 헤더 대신에 지정된 캐릭터 라인이 표시됩니다.

-o  지정된 키워드에 관한 정보를, 표시합니다. 각 키워드의 뒤에는, 등호(``='')와 캐릭터 라인을 추가해도 상관하지 않습니다. 이 경우, 표준의 헤더 대신에 지정된 캐릭터 라인이 표시됩니다.

-p  지정한 프로세스 ID 에 관한 정보를 표시합니다.

-r  프로세스 ID 순서가 아니고, 현재의 cpu 이용율 순서에 정렬합니다.

-S  프로세스 시간을 계산하는데, 종료한 child process의 시간을 parent process에 합계하도록(듯이) 변경합니다.

-T  표준 입력의 디바이스에 장착된 프로세스의 정보를 표시합니다.

-t  지정된 단말 디바이스에 장착된 프로세스의 정보를 표시합니다.

-U  지정되었다 username 에 속하는 프로세스를 표시합니다.

-u  다음의 키워드에 관한 정보를 표시합니다: user, pid, %cpu, %mem, vsz, rss, tt, state, start, time, command. -u 옵션을 지정하면(자) -r 옵션도 은근히 지정한 것이 됩니다.

-v  다음의 키워드에 관한 정보를 표시합니다: pid, state, time, sl, re, pagein, vsz, rss, lim, tsiz, %cpu, %mem, command. -v 옵션을 지정하면(자) -m 옵션도 은근히 지정한 것이 됩니다.

-w  디폴트의 현행 윈도우폭이 아니고, 132 자리수폭으로 표시합니다. 한 번보다 많이 -w 옵션을 지정하면(자), ps (은)는 윈도우폭에 관계없이, 필요한 만큼의 폭을 사용합니다.

-x  제어 단말이 없는 프로세스의 정보도 표시합니다.

유효한 키워드의 전리스트를 이하에 나타냅니다. 몇개의 키워드에 관해서는 한층 더 자세하게 말합니다.

%cpu
    프로세스의 cpu 이용율입니다. 실시간으로 최근 1 분간의 감쇠 평균입니다. 계산의 기점이 되는 시간은 변화하므로 (프로세스는 아직 태어났을 뿐인가도 모르기 때문에), %CPU 필드 전부의 합계는 100% 를 넘을 가능성도 있습니다.

%mem
    프로세스로 사용되고 있는 열매 메모리의 퍼센티지입니다.

flags
    인클루드 파일 <sys/proc.h> 그리고 프로세스에 정의된 플래그입니다.
    P_ADVLOCK | 0x00001 | 프로세스는 POSIX 제안 락을 보관 유지하고 있다
    P_CONTROLT | 0x00002 | 제어 단말을 가지고 있다
    P_INMEM | 0x00004 |  | 메모리에 읽히고 있다
    P_NOCLDSTOP | 0x00008 | child process가 정지해도 SIGCHLD 를 보내지 않는다
    P_PPWAIT | 0x00010 | parent process가, child process가 exec/exit 하는 것을 기다리고 있다
    P_PROFIL | 0x00020 | 프로파일 첨부로 실행되었다
    P_SELECT | 0x00040 | select 중; wakeup/waiting 는 위험하다
    P_SINTR | 0x00080 |  | sleep 는 끼어들어 가능
    P_SUGID | 0x00100 |  | 마지막 실행 이래, id 특권이 설정되어 있다
    P_SYSTEM | 0x00200 | 시스템 프로세스: 시그널이나 stat 나 스왑이 없다
    P_TIMEOUT | 0x00400 | sleep 중에 타임 아웃 했다
    P_TRACED | 0x00800 | 디버그 프로세스는 트레이스 되고 있다
    P_WAITED | 0x01000 | 디버그 프로세스는 child process를 기다리고 있다
    P_WEXIT | 0x02000 |  | 종료 동작중
    P_EXEC | 0x04000 |  | 프로세스는 exec 로 불렸다
    P_OWEUPC | 0x20000 | 차의 ast 프로세스가 addupc() 호출의 빌린 것
    P_SWAPPING | 0x40000 | 프로세스는 스왑 되고 있다

lim setrlimit(2) 의 호출로 지정되는, 메모리 사용량의 소프트 제한입니다.

lstart
    명령의 실행이 시작된 정확한 시각을, strftime(3) 에 기술된 ``%c''포맷으로 표시합니다.

nice
    프로세스 스케줄링에 있어서의 증가치입니다 (setpriority(2) 참조).

rss 프로세스의 열매 메모리(상주분 )의 크기(1024바이트 단위)입니다.

start
    명령이 개시된 시간입니다. 명령이 개시되었던 것이 24 시간 이내라면, 개시시각은 strftime(3) 그리고 기술된 ``%l:ps. 1p''포맷으로 표시됩니다. 명령이 개시되었던 것이 7 일 이내라면, 개시시각은 ``%a6. 15p''포맷으로 표시됩니다. 아니면, 개시시각은 ``%e%b%y''포맷으로 표시됩니다.

state
    프로세스 상태를 캐릭터의 열로 표시합니다. 예를 들면, “RWNA” 의 최초의 캐릭터는, 프로세스가 runnable 상태인 것을 나타내고 있습니다.

    D   프로세스는 디스크 (혹은 다른 끼어들어 불가능한 단기간의) 대기 상태입니다.
    I   프로세스는 idle 상태 (20 초 이상 sleep 하고 있다)입니다.
    J   프로세스는 jail(2) 안의 것입니다. 감옥의 호스트명은 ‘/proc/<pid>/status’ 에 기술되고 있습니다.
    R   프로세스는 runnable 상태입니다.
    S   프로세스는 20 초 미만의 sleep 상태입니다.
    T   프로세스는 stop 하고 있는 상태입니다.
    Z   프로세스는 죽어 있는 상태 (``좀비'')입니다.

    한층 더 이 후에 캐릭터가 있으면, 새로운 상태 정보를 나타냅니다.

    +   프로세스는 그 제어 단말의 foreground 프로세스 그룹에 속하고 있습니다.
    <   프로세스는 CPU 의 스케줄 우선도가 거론되고 있습니다.
    >   프로세스는 메모리 요구에 대한 소프트 제한이 지정되어 있어 현재 그 제한을 넘고 있습니다. 이러한 프로세스는 (필연적으로) 스왑 되고 있지 않습니다.
    A   프로세스는 랜덤인 페이지 치환 ( madvise(2) 에 있어서의 MADV_RANDOM (으)로, 예를 들면, lisp(1) 에서의 쓰레기 콜렉션)을 요구했습니다.
    E   프로세스는 종료하려고 하고 있습니다.
    L   프로세스는 열매 메모리중에 locked page (예를 들면, raw I/O 용무)를 가지고 있습니다.
    N   프로세스는 CPU 스케줄링 우선도 ( setpriority(2) 참조)가 내릴 수 있고 있습니다.
    S   프로세스는 FIFO 페이지 치환 ( madvise(2) 에 있어서의 MADV_SEQUENTIAL (으)로, 예를 들면, 가상기억의 다량의 데이터를 차례차례 액세스 한다 대규모 화상 처리 프로그램)을 요구했습니다.
    s   프로세스는 세션 리더입니다.
    V   프로세스는 vfork(2) 의 사이, 일시 중단되고 있습니다.
    W   프로세스는 스왚 아웃 되고 있습니다.
    X   프로세스는 트레이스 되고 있는지, 디버그 되고 있습니다.

tt  만약 있으면, 제어 단말의 패스명의 생략형입니다. 생략형은 /dev/tty 에 계속되는 3 캐릭터인가, 콘솔 경우의 ``con''입니다. 이미 프로세스가 그 제어 단말에 도달할 수 없는 (즉, revoke 될) 경우, 후에 ``-''가 붙습니다.

wchan
    프로세스가 기다리고 있는 이벤트 (시스템내의 주소). 숫자로 표시될 때에는, 주소의 최초의 부분은 깎아져 그 결과가 16 진으로 표시됩니다. 예를 들면 0x80324000 에서는 324000 으로 표시됩니다.

키워드 command 에는, 벌써 종료하고 있는데 부모가 아직 wait 해 주지 않았다 프로세스(즉 좀비)는 ``<defunct>''라고 표시됩니다. 종료하려고 해 블록 되고 있는 프로세스는 ``<exiting>''라고 표시됩니다. ps 유틸리티는, 메모리나 스왑 area를 검사해, 프로세스가 생성되었을 때의 파일명이나 인수를 추측합니다. 이 방법은, 본질적으로 조금 신뢰할 수 있는 것이 아니고, 프로세스는 어쨌든 이 정보를 파괴할 수가 있습니다. 그러니까, 표시되는 명령명이나 인수를 너무 그다지 신용해 되지 않습니다. 한편, 키워드 ucomm (어카운팅명)는 신용할 수 있습니다.

키워드
이하는 유효한 키워드와 그 의미의 전리스트입니다. 그 중 몇개인가는 별명이 있습니다.

%cpu
    cpu 사용율 (별명 pcpu)
%mem
    메모리 사용율 (별명 pmem)
acflag
    어카운팅 플래그 (별명 acflg)
command
    명령명과 인수
cpu 단기간 cpu 사용 계수 (스케줄링용)
flags
    16 진수의 프로세스 플래그 (별명 f)
inblk
    총블록 읽기수 (별명 inblock)
jobc
    작업 컨트롤수
ktrace
    트레이스중 플래그
ktracep
    트레이스중의 vnode
lim 메모리 이용의 제한
logname
    프로세스를 개시한 유저의 로그인명
lstart
    개시시각
majflt
    총페이지 폴트수
minflt
    총페이지 재생수
msgrcv
    총메세지 수신수 (파이프/소켓으로부터의 읽기)
msgsnd
    총메세지 송신수 (파이프/소켓에의 기입해)
nice
    nice 치 (별명 ni)
nivcsw
    총강제적 문맥 스위치수
nsigs
    총시그널 수락수 (별명 nsignals)
nswap
    총스왚 인/스왚 아웃수
nvcsw
    총자발적 문맥 스위치수
nwchan
    wait 채널 (주소로 표시)
oublk
    총블록 기입수 (별명 oublock)
p_ru
    리소스 이용량 (좀비 에 대해서만 유효)
paddr
    스왑 주소
pagein
    페이지 인수 (majflt 와 같다)
pgid
    프로세스 그룹 번호
pid 프로세스 ID
poip
    진행중의 페이지 아웃수
ppid
    parent process ID
pri 스케줄링 우선도
re  열매 메모리 상주 시간 (초단위; 127 = 무한)
rgid
    열매 그룹 ID
rlink
    run 행렬에 있어서의 역링크 (혹은 0)
rss 상주 세트 사이즈
rsz 상주 세트 사이즈 + (텍스트의 사이즈/텍스트의 이용 총수) (별명 rssize)
rtprio
    실시간 우선도 (101 = 실시간 프로세스는 아니다)
ruid
    열매 유저 ID
ruser
    유저명 (ruid 로부터 얻을 수 있던 것)
sess
    세션 포인터
sig 지연 된 시그널 (별명 pending)
sigcatch
    포획 된 시그널 (별명 caught)
sigignore
    무시된 시그널 (별명 ignored)
sigmask
    블록 된 시그널 (별명 blocked)
sl  sleep 시간 (초단위; 127 = 무한)
start
    개시시각
state
    기호에서의 프로세스 상태 (별명 stat)
svgid
    setgid 프로그램에서의 saved gid
svuid
    setuid 프로그램에서의 saved uid
tdev
    제어 단말의 디바이스 번호
time
    유저 + 시스템의 합계 cpu 시간 (별명 cputime)
tpgid
    제어 단말 프로세스 그룹 ID
tsess
    제어 단말 세션 포인터
tsiz
    텍스트 사이즈 (K 바이트 단위)
tt  제어 단말명 (2 캐릭터의 생략형)
tty 제어 단말의 완전한 이름
uprocp
    프로세스 포인터
ucomm
    어카운팅으로 사용되는 명령명
uid 실효 유저 ID
upr 시스템 콜로부터 돌아갈 때의 스케줄링 우선도 (별명 usrpri)
user
    유저명 (uid 로부터 얻은 것)
vsz k 바이트 단위의 가상기억 사이즈 (별명 vsize)
wchan
    wait 채널 (심볼명으로 표시)
xstat
    종료 스테이터스 또는 stop 스테이터스 (stop 프로세스나 좀비 프로세스때에만 유효)

관련 파일
/dev/kmem
    디폴트의 카네르메모리데바이스
/var/run/dev.db
    /dev 이름 데이타베이스
/var/run/kvm_kernel.db
    시스템 (커널)의 이름 리스트 데이타베이스
/kernel
    디폴트의 시스템의 이름 리스트
/proc
    procfs(5) 의 마운트 포인트

관련 항목
kill(1), w(1), kvm(3), strftime(3), procfs(5), pstat(8), sysctl(8)

버그
ps (은)는 시스템보다 빠르게 실행하지 못하고, 다른 프로세스와 같게 스케줄 되어 실행되므로, 표시되는 정보는 정확한 것은 않을 수 없습니다.