# 프로세스 목록 확인
1) ps : 현재 실행중인 프로세스에 대한 정보를 출력
ps 명령이 출력하는 PID를 통해 프로세스의 부모-자식 관계도 확인할 수 있다.
* 옵션 :
<unix 옵션>
-e : 시스템에서 실행 중인 모든 프로세스의 정보를 출력
-f : 프로세스에 대한 자세한 정보를 출력
-u uid : 특정 사용자에 대한 모든 프로세스의 정보를 출력
-p pid : pid로 지정한 특정 프로세스의 정보를 출력
<BSD 옵션>
a : 터미널에서 실행시킨 프로세스의 정보를 출력
u : 프로세스 소유자 이름, CPU 사용량, 메모리 사용량 등 상세 정보를 출력
x : 시스템에서 시랳ㅇ 중인 모든 프로세스의 정보를 출력
<GNU 옵션>
--pid PID 목록 : 목록으로 지정한 특정 PID 정보를 출력
* 사용 예
ps
ps -ef
ps aux
ps --pid
* ps -f 출력 정보
UID : 프로세스를 실행한 사용자 ID
PID : 프로세스 번호
PPID : 부모 프로세스 번호
C : CPU 사용량 (%값)
STIME : 프로세스의 시작 날짜나 시간
TTY : 프로세스가 실행된 터미널의 종류와 번호
TIME : 프로세스 실행 시간
CMD : 실행되고 있는 프로그램 이름(명령)
* ps a 옵션
터미널에서 실행시킨 프로세스의 정보를 출력
출력 내용 중 STAT는 프로세스의 상태를 나타내며, 문자의 의미는 아래와 같다.
R : 실행 중
S : 인터럽트가 가능한 대기(sleep) 상태
T : 작업 제어에 의해 정지된(stopped) 상태
Z : 좀비 프로세스(defunct)
STIME : 프로세스의 시작 날짜나 시간
s : 세션 리더 프로세스
+ : 포그라운드 프로세스 그룹
l(소문자 L) : 멀티 스레드
* ps au 출력 정보
a 옵션이나 -f 옵션에 비해 CPU 메모리 사용량 등 추가적인 정보가 더 출력됨.
USER : 사용자 계정 이름
%CPU : 퍼센트로 표시한 CPU 사용량
%MEM : 퍼센트로 표시한 물리적 메모리 사용량
VSZ : 사용 중인 가상 메모리의 크기(KB)
RSS : 사용 중인 물리적 메모리의 크기(KB)
START : 프로세스 시작 시간
* ps -e 옵션, -f 옵션
TTY 값이 ? 인 것은 대부분 데몬으로 시스템이 실행한 프로세스다.
그리고 출력 내용이 많을 경우 |(파이프)와 more 나 less 명령을 함께 사용하면 좋다.
ps -e | more
더 자세한 정보를 확인하려면 ps -ef를 입력함.
TTY가 ? 인 프로세스는 사용자 ID가 root 이다. 스레드는 CMD에 [] 로 표시하여 구분된다.
* ps ax 옵션, aux 옵션
ps ax : 시스템에서 실행중인 모든 프로세를 출력
ps aux : -ef 옵션 처럼 시스템에서 실행 중인 모든 프로세스에 대한 자세한 정보를 출력
* ps -u
특정 사용자가 실행한 프로세스의 목록을 확인할 수 있다.
ex) ps -u user1
자세한 정보를 보려면 ps -fu user1
* ps -p 옵션
특정 PID를 지정하면 해당 프로세스의 정보를 출력
ex) ps -p 117
ps -fp 117 (더 자세한 정보를 출력)
# 특정 프로세스 정보 검색
* ps -ef | grep bash (bash에 대한 자세한 정보 출력)
* pgrep
- 지정한 패턴과 일치하는 프로세스의 정보를 출력
- 형식 : pgrep [옵션] [패턴]
- 옵션
-x : 패턴과 정확히 일치하는 프로세스의 정보를 출력
-n : 패턴을 포함하고 있는 가장 최근 프로세스의 정보를 출력
-u 사용자 이름 : 특정 사용자에 대한 모든 프로세스를 출력
-l : PID와 프로세스의 이름을 출력
-t term : 특정 단말기와 관련된 프로세스의 정보를 출력
ex) pgrep -x bash
pgrep -l bash
더 자세한 정보를 검색하려면 ps 명령과 연결해서 사용.
ps -fp $(pgrep -x bash)
ps -fp $(pgrep -u user1 bash)
# 프로세스의 종료
응답이 없는 프로세스나 불필요한 프로세스를 강제 종료하려면 해당 프로세스의 PID를 알아야 한다.
ps -ef나 ps aux 명령으로 PID와 PPID를 알 수 있다.
프로세스를 종료하는데는 kill 이나 pkill 명령을 사용함. 프로세스에 시그널을 보내 종료한다.
시그널은 프로세스에 무언가 발생했음을 알리는 간단한 메시지다. 이 메시지에는 무엇이 발생했는지를 나타내는 미리 정의된
상수를 사용. 시그널은 번호로 구분되며, 이름을 가지고 있다. kill -l 명령으로 시그널의 목록을 확인 가능
- 주요 시그널
시그널 | 번호 | 기본 처리 | 의미 |
SIGHUP | 1 | 종료 | 터미널과의 연결이 끊어졌을 때 발생 |
SIGINT | 2 | 종료 | 인터럽트로 사용자가 Ctrl+C를 입력하면 발생한다. |
SIGQUIT | 3 | 종료, 코어 덤프 | 종료 신호로 사용자가 Ctrl+\을 입력하면 발생한다. |
SIGKILL | 9 | 종료 | 이 시그널을 받은 프로세스는 무시할 수 없으며, 강제로 종료된다. |
SIGALRM | 14 | 종료 | 알람에 의해 발생한다. |
SIGTERM | 15 | 종료 | kill 명령이 보내는 기본 시그널이다. |
* kill : 프로세스 종료
kill 명령은 잉ㄴ자로 지정한 프로세스에 시그널을 전달한다.
프로세스는 각 시그널을 받았을 때 어떻게 처리할 것인지 동작이 지정되어 있다.
15번 시그널은 일반적으로 프로세스 종료이지만, 시그널을 무시하거나 다른 동작을 하도록 지정되어 있다면 프로세스가
종료되지 않을 수 있다. kill 명령에서 시그널을 지정하지 않을 경우 15번 시그널로 간주됨.
9번 시그널은 강제 종료이지만, 좀비 프로세스는 종료되지 않을 수 있다.
- 형식 : kill [-시그널] PID
- 시그널
2: 인터럽트 시그널을 보낸다. (Ctrl+C)
9 : 프로세스를 강제로 종료한다.
15 : 프로세스와 관련된 파일들을 정리하고 종료한다. 종료되지 않는 프로세스가 있을 수 있다.
ex) kill 1001
kill -15 1001
kill -9 1001
* pkill
- kill 명령과 마찬가지로 시그널을 보내지만 PID 가 아니라 프로세스의 명령이름(CMD)으로 프로세스를 찾아 종료.
kill 명령과 차이점은 해당하는 명령이름으로 여러 개가 검색될 경우 한 번에 모두 종료한다.
자신이 소유한 프로세스만 종료 가능하다.
ex) pkill man
* killall
- pkill 명령 처럼 프로세스의 명령 이름(CMD)으로 프로세스를 찾아 종료
이 이름으로 실행 중인 모든 프로세스를 한 번에 종료. 해당 프로세스를 소유하고 있어야 함.
# 프로세스 관리 도구
ps 명령으로는 현재 프로세스 목록을 확인만 할 수 있다.
이 정보를 사용자가 보기 편하게 다양한 기능을 제공하는 도구가 있는데, top 명령과 GUI인 그놈의 '시스템 정보' 이다
* top 명령
현재 실행중인 프로세스의 정보를 주기적으로 출력하는데, 프로세스의 자세한 요약 정보를 상단에 출력하고,
각 프로세스의 정보를 하단에 출력한다.
top 명령은 종료하지 않고 실시간으로 프로세스의 상태를 보여주며 내부적으로 사용하는 명령도 있다
* 출력 정보
PID : 프로세스 ID
USER : 사용자 계정
PR : 우선 순위
NI : Nice 값
VIRT : 프로세스가 사용하는 가상 메모리의 크기
RES : 프로세스가 사용하는 메모리의 크기
SHR : 프로세스가 사용하는 공유 메모리의 크기
%CPU : 퍼센트로 표시한 CPU 사용량
%MEM : 퍼센트로 표시한 메모리 사용량
TIME+ : CPU 누적 이용 시간
COMMAND : 명령 이름
* top 내부 명령
Enter, Space Bar : 화면을 즉시 다시 출력.
h, ? : 도움말 화면을 출력
k : 프로세스를 종료한다. 종료한 프로세스의 PID를 물어본다.
n : 출력하는 프로세스의 개수를 바꾼다.
u : 사용자에 따라 정렬하여 출력
M : 사용자의 메모리 크기에 따라 정렬하여 출력한다.
p : CPU 사용량에 따라 정렬하여 출력
q : top 명령을 종료 한다.
* GUI 그놈의 시스템 정보
[현재 활동] - [프로그램 표시] - [유틸리티] - [시스템 정보]와 같은 순서로 동작
윈도우와 같은 프로세스 화면 나옴
'컴퓨터 세상 > LiNuX' 카테고리의 다른 글
작업 예약 (0) | 2022.05.26 |
---|---|
작업 제어 (포그라운드&백그라운드) (0) | 2022.05.19 |
프로세스의 개념 (0) | 2022.05.17 |
특수 접근 권한 설정 (0) | 2022.05.03 |
기본 접근 권한 설정 (0) | 2022.04.08 |