Wednesday, April 4, 2018

CentOS 6.6 리눅스 기초] 15. 프로세스 관리 (Process Management)


안녕하세요. 썬구루입니다. 이 게시물에서는 프로세스 관리에 대해 알아보도록 하겠습니다.

프로세스(Process)란 무엇인가? 메모리상에서 실행되고 있는 프로그램을 프로세스라고 합니다. 우리가 ls라는 명령을 실행하면 파일시스템에 있는 ls 파일이 일시적으로 물리적 메모리에 올라가 실행됩니다. 그리고 실행이 끝나면 프로세스는 제거되고 메모리상에서 제거되는 것이죠.

프로세스와 프로세서(Processor)는 엄연히 다르죠. 프로세서는 물리적 연산처리 장치를 나타내니까요. 서버에는 수많은 프로세스가 존재합니다. 이를 확인하고 관리하기 위해 관련된 명령을 사용하는데 이것에 대해 알아보도록 하겠습니다.

■ ps 명령

디렉터리에 존재하는 파일을 확인하기 위해 ls 명령을 사용하듯 메모리에 존재하는 프로세스들에 대한 정보를 확인하기 위해 ps라는 명령을 사용한다. 옵션 사용에 따라 프로세스에 대한 다양한 정보를 확인할 수 있다. 그리고 이 명령은 /proc에 관련되어 있다. 아무런 옵션 없이 단독으로 이 명령을 사용한다면 현재 사용하는 쉘 또는 터미널에 관련된 프로세스를 보여준다.

1). 명령 형식

ps [옵션]

2). 옵션

옵 션
내 용
 -e
 메모리상에 존재하는 모든 프로세스 정보를 보여준다.
 -f
 프로세스에 대한 상세 정보를 보여준다.
 -U User_list
 명시한 사용자 계정에 관련된 프로세스 정보를 보여준다.
-p PID_list
 명시한 PID에 관련된 프로세스 정보를 보여준다.

이 외에도 다양한 옵션이 있지만 이 정도면 프로세스에 대해 충분히 정보를 확인할 수 있다.

3). ps 명령 필드 정보

필드 값
내 용
UID
 프로세스를 실행시킨 사용자 계정 ID를 나타낸다.
PID
 커널이 프로세스를 관리하기 위해 부여한 프로세스 ID를 나타낸다.
PPID
 프로세스의 부모 프로세스 ID를 나타낸다. 터미널을 통해 ls 명령을 사용할 때 ls 프로세스의 부모 프로세스는 터미널 프로세스. ^^
C
 프로세스에 의해 사용되고 있는 CPU 사용량. 정수로 된 % 사용량
STIME
 프로세스 시작(실행) 시간을 나타낸다.
TTY
 Terminal Type. 프로세스가 실행된 터미널 종류를 나타낸다. 
TIME
 CPU에 의해 처리된 누적시간을 나타낸다.




4). 예제




■ top 명령

이 명령은 프로세스 정보를 실시간 모니터링하기 위해 사용한다.

1). 명령 형식

top [옵션]

2). 출력 및 필드 정보


옵 션
내 용
PID
 커널이 프로세스를 관리하기 위해 부여한 프로세스 ID를 나타낸다.
USER
 프로세스를 실행시킨 사용자 계정 ID를 나타낸다.
PR
 프로세스 우선순위 (Priority)
NI
 작업에 의해 사용되는 가상메모리 (Virtual Image) (가상메모리 = SWAP 메모리 사용량 + RES 물리적 메모리 사용량) 
VIRT
 작업에 의해 사용되는 가상메모리 (Virtual Image) (가상메모리 = SWAP 메모리 사용량 + RES 물리적 메모리 사용량) 
RES
 작업에 의해 사용되는 물리적 메모리 (Resident Size)
SHR
 작업에 의해 사용되는 공유메모리 (Shared Memory size)
S
 프로세스 상태 (Process Status) ( Z : Zombie, T : Traced or Stopped, S : Sleeping, R : Running, D : uninterruptable sleep)
%CPU
 CPU 사용률
%MEM
 메모리 사용률
TIME+
 실행 이후 작업에 의해 사용된 CPU 사용시간 (1/100 초 단위)
COMMAND
 실행된 명령


3). 옵션

옵 션
내 용
 -a
 작업의 실제 물리적 메모리 사용량으로 정렬한다.
 -c
 작업의 CPU 사용량으로 정렬한다. 
 -d Interval
 top 명령 정보가 갱신되는 시간 간격. 초단위. 기본값 3초.(Interval time)
 -p PID
 특정 PID에 대한 프로세스 정보를 출력한다. 여러 PID를 선택해야 할 경우 -p PID1,PID2,PID3
 -u USERNAME
 특정 사용자에 관련된 프로세스 정보를 출력한다.

4). 상호대화형 명령 (Interactive Commands)

명 령
내 용
s
 정보 갱신 시간 간격을 재조정 (Interval time)
B
 글자 굵기 변경
n
 보여지는 최대 작업 수를 재조정 (Maxmum Tasks)
m
 메모리/스왑 정보 보기 토클링
1
 다중프로세스 (SMP) 보기 토클링
l
 평균 로드 보기 토글링 
t
 Tasks와 CPU 보기 토글링 
u
 특정 사용자에 관련된 프로세스 정보를 출력한다. 
k
 특정 PID를 가지는 프로세스에게 kill 시그널을 전달한다. 기본 시그널 : 15 Terminate
r
 renice 명령으로 프로세스 우선순위를 조정한다. 
f
 출력될 필드를 설정하기 위해 사용한다.
o
 출력 정렬 우선순위를 설정하기 위해 사용한다.
z
 색있는 출력을한다.  
Shift + P
 CPU 사용량 순으로 정렬한다.
Shift + M
 메모리 사용량 순으로 정렬한다.
Shift + T
 CPU를 사용 시간 순으로 정렬한다.
q
 top 명령을 종료한다. 

5). 예제




■ pstree 명령

동작 중인 프로세스들의 상호 관계를 계층 트리(Tree)처럼 보기 위해 사용되는 명령이다.

1). 명령형식

pstree [옵션] USERNAME 또는 PID



2). 옵션

옵 션
내 용
 -a
 명령줄 인자들을 보여준다.
 -p
 프로세스 PID를 보여준다. 

3). 예제


■ pgrep 명령

패턴으로 메모리상에 실행되고 있는 프로세스 정보를 검색하기 위해 사용되는 명령이다. 기본적으로 해당 패턴에 매치되는 프로세스 PID 정보를 보여준다.

1). 명령 형식

pgrep [옵션] [PATTERN]

2). 옵션

옵 션
내 용
 -U USERNAME
 특정 사용자에 의해 실행되고 있는 프로세스 PID 정보를 출력한다.
 -v
 패턴을 포함하고 있는 프로세스를 제외한 나머지 프로세스에 대한 PID를 출력한다.
 -l
 PID 뿐 아니라 작업 이름(프로세스 이름. 즉 명령)를 같이 출력한다.
 -t TERM_TYPE
 특정 터미널에 관련된 프로세스에 대한 PID를 출력한다.

3). 예제


■ renice 명령

이 명령은 동작 중인 프로세스에 대한 우선순위를 재조정하기 위해 사용된다. 우선순위 재조정 값은 -20부터 20까지 있으며 -값은 우선순위를 높여준다.

1). 명령 형식

renice 우선순위 PID

2). 예제




■ kill 명령

이 명령은 동작 중인 프로세스에 신호(Signal)를 전달하기 위해 사용한다. 보통 프로세스를 강제 종료하기 위해 사용하고 기본값이 15인 SIGTERM으로 설정되어 있다. 한 번 더 강조하지만 프로세스에 신호를 전달하기 위해 사용되는 명령이다. 보통 신호라고 하지 않고 시그널이라 읽는다. CentOS 6.6에서는 아래와 같이 64개의 시그널이 존재하는데 빈번하게 사용하는 시그널에 대해 알아볼 것이다.


1). 명령 형식

kill [옵션] PID

2). 옵션

옵 션
내 용
-s SIGNAL_NUM
 프로세스에 전달할 시그널(Signal) 번호를 지정한다.
-l [SIGNAL_NUM]
 시그널(Signal)에 대한 정보를 출력한다.
-n
 n에 프로세스에 전달할 시그널(Signal) 번호를 넣는다. 

3). 자주 사용하는 시그널(Signal)

시그널(Signal) 번호
내 용
1
 서비스를 제공하는 데몬 프로세스(예를 들어 sshd)에 보통 적용되며 이 신호를 전달하면 구성 파일을 다시 읽어들여 적용한다. 보통 서비스에 대한 구성파일(.conf)를 변경한 후 적용을 하기 위해 이 신호를 사용한다.
8
 프로세스를 강제 산술연산 오류를 일으킨다.
9
 프로세스를 강제 종료하기 위해 사용한다. SIGTERM 신호로 프로세스가 종료되지 않을 때 사용할 수 있는 시그널이다.
15
 프로세스를 종료하기 위해 사용한다.
19
 프로세스를 일시 중지시키기 위해 사용한다.

4). 예제

pgrep 명령을 사용하여 sshd 데몬 프로세스에 대한 PID를 알아내어 /etc/ssh/sshd_config 파일을 다시 읽어들여 적용하기 위해 1번 SIGHUP 신호를 사용하였다. 또한 user1 사용자가 사용하는 쉘 프로세스(bash)를 강제 종료하기 위해 -9 (SIGKILL)를 사용하였다.


■ pkill 명령

이 명령은 패턴으로 프로세스를 검색하여 그 프로세스에 시그널을 전달하기 위해 사용한다.

1). 명령 형식

pkill [옵션] [PATTERN]

2). 옵션

옵 션
내 용
-SIGNAL_NUM
 프로세스에 전달할 시그널(Signal) 번호를 지정한다. 사용되는 시그널은 kill 명령과 동일한다.
-U USERNAME
 특정 사용자에 관련된 프로세스에 시그널을 전달하기 위해 사용한다.
-t TERM_TYPE
 특정 터미널에 관련된 프로세스에 시그널을 전달하기 위해 사용한다.

4). 예제

sleep은 명시한 시간만큼 지연시키는 명령이다. 뒤따르는 숫자는 초 단위이다. &(empersand 앰퍼샌드)는 명령을 후면부(Backgroup 그냥 백그라운드라 읽는다.)로 실행시키기 위해 명령 끝에 사용한다. sleep 명령을 백그라운드로 실행시켰고 이 명령이 메모리상에 실행되고 있는 것을 pgrep 명령으로 확인하였다. 그리고 패턴으로 프로세스를 검색 후 신호를 전달하기 위해 pkill 명령을 사용하였고 시그널은 종료를 뜻하는 -15 SIGTERM을 사용하였다. 그리고 특정 사용자의 프로세스를 종료하기 위해 -U 옵션을 사용하였다.






No comments:

Post a Comment