명령어 ps는 Process Status의 약자로, 현재 시스템 상에서 작동 중인 프로세스를 확인할 수 있는 명령어다.
ps 명령어는 여러가지의 옵션이 있는데, System V 계열은 대시(dash, -)를 사용하고, BSD 계열은 대시(-)를 사용하지 않는다. GNU에서의 옵션 표기는 두 개의 대시(--)를 사용하므로, ps 에서의 정확한 옵션 사용은 매우 중요하다.
* System V 계열 - 상용 유닉스. 솔라리스 및 리누스토발즈의 커널을 기점으로 하는 다양한 리눅스 (사실상 'BSD'라는 말이 붙지 않는 모든 리눅스 라고 보면 됨.)
BSD 계열 - macOS, iOS, FreeBSD, GhostBSD, OpenBSD 등
우선 ps의 유용한 사용법을 보기 전, ps를 입력했을 때 나타나는 결과 항목들이 무엇을 의미하는지부터 짚고 넘어가자!
ps 출력 항목
- USER : BSD 계열에서 나타나는 항목으로 프로세스 소유자의 이름
- UID : System V 계열에서 나타나는 항목으로 프로세스 소유자의 이름
- PID : 프로세스 식별 번호
- PPID : 부모 프로세스 ID
- %CPU : CPU 사용 비율의 추정치 (BSD)
- %MEM : 메모리 사용 비율의 추정치 (BSD)
- VSZ : KB 단위 또는 페이지 단위의 가상 메모리 사용량
- RSS : 실제 메모리 사용량 (Resident Set Size)
- TTY : 프로세스와 연결된 터미널
- S / STAT : 현재 프로세스의 상태 코드 (S : System V / STAT : BSD)
- TIME : 총 CPU 사용 시간
- COMMAND : 프로세스의 실행 명령행
- STIME : 프로세스가 시작된 시간 혹은 날짜
- C / CP : 짧은 시간 동안의 CPU 사용률 (C: System V / CP : BSD)
- F : 프로세스의 플래그
- PRI : 실제 실행 우선순위
- NI : nice 우선순위 번호
ps 옵션
사용법 : $ ps [option]
System V 계열
- -A : 모든 프로세스를 출력.
- -a : 세션 리더(일반적으로 로그인 쉘)을 제외하고, 데몬 프로세스처럼 터미널에 종속되지 않은 모든 프로세스를 출력.
- -e : 커널 프로세스를 제외한 모든 프로세스를 출력.
- -f : 풀 포맷으로 보여줌. System V 스타일로 출력해주어, UID, PID, PPID 등이 함께 표시됨.
- -l : 긴 포맷으로 보여줌. 프로세스의 정보를 길게 보여주는 옵션으로 우선순위와 관련된 PRI와 NI값을 확인 가능.
- -o [value] : 출력 포맷을 지정하는 옵션으로, [value]로 pid, tty, time, cmd 등을 지정할 수 있음.
- -M : 64비트 프로세스들을 보여줌.
- -m : 프로세스들 뿐만 아니라 커널 스레드드들도 함께 보여줌.
- -p : 특정 PID를 지정할 때 사용.
- -r : 현재 실행 중인 프로세서를 보여줌.
- -u : 특정 사용자의 프로세스 정보를 확인할 때 사용. 사용자를 지정하지 않으면 현재 사용자를 기준으로 정보를 출력.
- -x : 로그인 상태에 있는 동안 아직 완료되지 않은 프로세서들을 보여줌. 유닉스 시스템은 사용자가 로그아웃한 후에도 임의의 프로세서가 계속 동작하게 할 수 있는데, 이 말은 해당 프로세서는 자신을 실행시킨 쉘이 없어도 계속 자신의 일을 수행한다는 말임. 이 때 -x 옵션을 통해, 자신의 터미널이 없는 프로세서들을 확인할 수 있음.
BSD 계열
- a : 터미널과 연관된 프로세스를 출력하는 옵션. 보통 x 옵션과 연계하여 모든 프로세스를 출력할 때 사용.
- l : 긴 포맷으로 보여줌. 프로세스의 정보를 길게 보여주는 옵션으로 우선순위와 관련된 PRI와 NI값을 확인 가능.
- u : 프로세스의 소유자를 기준으로 출력. (ps ax 만 하면 USER 기준의 정보가 안 뜸. 따라서 aux 로 대부분 씀.)
- x : 데몬 프로세스처럼 터미널에 종속되지 않는 프로세스를 출력. 보통 a 옵션과 결합하여 모든 프로세스를 출력할 때 사용.
- ww : 터미널 창을 넓게 하여 긴 출력결과물까지 잘리지 않게 모두 보여줌.
유용한 ps 명령문 예제
1. 현재 쉘(Shell)의 모든 프로세스 나열
$ ps
2-1. System V 계열 - '모든 프로세스'를 출력
$ ps -A
$ ps -e (커널 프로세스 제외.)
2-2. BSD 계열 - '모든 프로세스'를 출력
$ ps axu
3. 커널 제외 모든 프로세스를 'Full Foramt'으로 출력.
$ ps -ef
$ ps -eF (-F: Extra Full-Format)
4. 실제 사용자 ID(RUID) 또는 이름을 기준으로 프로세스 출력. (-U: RUID 기준 / -u : EUID 기준)
$ ps -fU junho
$ ps -fu 1000 ($ id => 현재 로그인한 사용자의 숫자로 된 아이디 확인 가능.)
5. 루트 사용자 권한으로 실행중인 모든 프로세스를 사용자 형식으로 출력.
$ ps -U root -u root u
6. 특정 그룹(RUID or 그룹이름)이 소유한 모든 프로세스를 출력.
$ ps -fG [그룹ID or 그룹이름]
ex) $ ps -fG apache
7-1. 특정 PID의 프로세스 확인.
$ ps -fp [PID] (PID ,(comma)로 복수 입력 가능)
7-2. 특정 PPID의 프로세스 확인.
$ ps -f --ppid [PPID]
8. 특정 tty로 프로세스 확인.
$ ps -t [tty]
9. 시스템 프로세스가 서로 연결되는 방식을 보는 방법. (부모가 종료된 프로세스는 init or systemd에 의해 채택됨.)
$ ps -e --forest
10. 출력 포맷 지정하여 프로세스 출력.
$ ps -eo [출력 포맷들]
ex) ps -eo pid,ppid,user,cmd
11. 프로세스 이름으로 특정 프로세스를 출력.
$ ps -C [프로세스이름]
ex) ps -C
12. 특정 프로세스의 실행된 시간을 확인.
$ ps -eo comm,etime,user | grep [프로세스이름]
13. 가장 높은 메모리 및 CPU 사용량을 가지는 프로세스 출력.
$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
14. 응답하지 않거나 높은 CPU 점유시간을 가지는 프로세스 조회.
$ ps -A | grep -i stress
15. 보안 컨텍스트를 표시하여 프로세스 조회.
$ ps -eM
$ ps --context
참고
https://ko.linux-console.net/?p=2219
https://jhnyang.tistory.com/268
'OS > Linux' 카테고리의 다른 글
[Linux][CentOS 7] vi, vim 테마(colorscheme) 설정 - onehalf (0) | 2023.03.08 |
---|---|
[Linux] CentOS 7 에서 User 생성(useradd)과 User 홈 디렉토리 설정 (0) | 2023.02.28 |
[Linux][쉘스크립트] '$' 의 활용 (1) | 2022.08.23 |
정규표현식(Regex)의 개념과 기초 문법 (0) | 2022.08.23 |
[Linux] 쉘 스크립트 - 파일 존재 여부 확인하기! (0) | 2022.08.17 |
최근댓글