본문 바로가기
모의해킹 침해대응 과정/Linux 기초

리눅스 기초때기 5,6일차. / 프로세스 관리

by 알거음슴 2021. 4. 5.

 

 

프로세스 : 실행중인 프로그램을 일컫는 말.

PID : 프로세스가 실행 될 때 할당받는 프로세스 식별 고유번호

PPID : 부모 프로세스 식별번호 (서브 프로세스를 실행시킨 프로세스)

데몬(Daemon) : 시스템 또는 특정 서비스를 위해 백그라운드에서 동작하는 프로세스.

ex) 웹데몬 = httpd  /  telnet데몬 = telnet  /  ftp데몬 = vsftpd ....

 

 

2. 프로세스 정보 (/proc/[PID])

/proc : 각 프로세스에 해당되는 PID 디렉토리들이 있다.

 pCMD (ps, pmap.... ) 등 수많은 프로세스 관련 명령어들의 정보가 모두 /proc/[PID] 에 내용이 저장되어있음.

 해당 폴더들은 프로세스가 실행될때만 존재하고 프로세스가 종료되면 함깨 사라짐.

 

 

3. 프로세스 관리 

1) 프로세스 관리

 (1) 프로세스 실행

   fg (포어그라운드) : fork 방식, fg로 실행 시 기존 쉘을 멈추고 실행된 프로세스를 동작시킴 (기존 쉘 이용불가)

   bg (백그라운드) : [prosess] & 으로 호출 기존 쉘과 별개로 프로세스를 동작시킴 (기존 쉘 이용가능)

  * GUI 환경, 오랫동안 실행을 유지해야하는 프로세스 등에 활용됨.

 

 (2) 프로세스 확인

   ps : 실행중인 프로세스의 확인.

 * 주요 옵션  

   ps -l : 프로세스의 정보를 자세히 출력 

   ps -e : 모든 프로세스 리스트 출력 ( TTY가 ? 경우 운영체제 실행 시 실행됨 ex 데몬 )

   ps -f : 프로세스 시작시간, 매개변수등 모든 정보를 출력 (CMD의 options까지)

   ps -a : 다른 사용자의 프로세스 상태도 표시된다.

   ps -u : 지정된 사용자에 연관된 프로세스에 대한 정보를 출력한다

   ps -x : 화면에 보이지 않는프로세스까지 모두 표시

  * 주요 조합

   ps -ef : 모든 프로세스 및 프로세스의 상세정보 확인시 사용되는 포멧

   ps -aux : 모든 사용자의 모든 프로세스를 확인할때 사용되는 포멧

 

 (3) 프로세스 종료

  kill : 프로세스를 종료할때 사용하는 명령어 

 kill [SIG] [PID] 형식이며 기본 SIG는 -15 이며 정상종료를 뜻한다 ( kill [PID] = kill -15 [PID] )

  -Signal : 운영체제에 기본 내제되어있는 프로세스에게 보내는 비동기적 메시지

 * 주요 SIG(signal)

 2번 (SIGINT) : 키보드 인터럽트, 프로그램 종료 또는 차단 = Ctrl + C

 3번 (SIGOUT) : 키보드 종료 = Ctrl + W

 9번 (SIGKILL) : 강제 종료 무시할 수 없다

 15번 (SIGTERM) : 정상 종료 , 기본 시그널 

 20번 (SIGTSTP) : 키보드 중지 = Ctrl + Z

 

[참고] kill, killall, pkill 

kill 의 경우 PID 로 적용하지만 killall, pkill 의 경우에는 해당 프로세스의 이름으로 명령을 내린다, PID는 다양한데 이름이 모두 동일한경우는 일일이 kill 보다는 killall, pkill 등을 활용하여 한번에 종료할 수 있다. 

ex) killall httpd

 

 

2) job 관리 ( job, % )

job : 실행중인 프로세스를 job 라고 한다. 즉 프로세스 = job

 (1) job 실행  

   fg (포어그라운드) : fork 방식, fg로 실행 시 기존 쉘을 멈추고 실행된 프로세스를 동작시킴 (기존 쉘 이용불가)

   bg (백그라운드) : [prosess] & 으로 호출 기존 쉘과 별개로 프로세스를 동작시킴 (기존 쉘 이용가능)

 (2) job 확인  

   jobs : 실행중인 job 들의 현황을 볼 수 있는 CMD, jobID 도 여기서 확인이 가능하다.

   fg (fg %(jobID]) : 백그라운드에서 실행중인 프로세스를 포어그라운드로 가져올 수 있음.

   bg (bg %[jobID]) : 포어그라운드에서 실행중인 프로세스를 백그라운드로 가져올 수 있음.

 (3) job 종료  

   kill [SIG] %[jobID] : 위의 ps에서 활용된 kill과 동일하게 적용 가능하다.

 

[참조] 사용예시

 1) 백업 스크립트 사용 예

# /root/bin/backup.sh -> <ctrl+z> -> bg %1 시 백업으로 보낼 수 있음.

 2) 하나의 터미널을 사용하여 작업 하는 경우.

# 터미널이 GUI 기반이 아닌 TUI 기반으로 운영될 경우, 터미널이 1개이기 때문에 bg 와 fg를 활용해야한다.

 

 

4. 프로세스 모니터링 

top : 실시간으로 프로세스 상태나 CPU, memory 등을 확인할수 있다. (windows의 작업관리자와 유사)

* 기본 top 수행 시간간격은 3~4초, CPU 사용량별로 정렬.

* top -u [USERNAME] : 해당 사용자의 프로세스 정보를 실시간 모니터링

* 정렬 방식 변경 방법  CPU기준 : C  /  MEM기준 : M

 

 1) TOP 정보 해석 

top - 11:19:19 up 1 day, 12 min, 2 users, load average: 0.11, 0.03, 0.01

Tasks: 288 total, 1 running, 287 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.2 hi, 0.1 si, 0.0 st

MiB Mem : 2808.6 total, 234.3 free, 1310.8 used, 1263.6 buff/cache

MiB Swap: 3100.0 total, 3081.5 free, 18.5 used. 1300.2 avail Mem

 

 (1째 줄) top - 11:19:19 up 1 day, 12 min, 2 users, load average: 0.11, 0.03, 0.01

 -> uptimeCMD와 동일정보. 현재 시간과 시스템 부팅 후 작동한시간, 현재 사용자 수를 보여주며 load average는 CPU 의 평균 값을 보여준다.

 * 서버들은 대부분 300일에 한번씩 재부팅 해주려고 한다.

 

 * load average: 0.11, 0.03, 0.01 =  load average: 1분, 5분, 15분. 

 -> 계산방법 : load average / CPU 개수 (core/thread) ≥ 1  일경우 부하가 걸리는 상태이다.

 (2째 줄) Tasks: 288 total, 1 running, 287 sleeping, 0 stopped, 0 zombie

시스템에 동작중인 프로세스의 상태를 보여준다 ex) 총갯수, 동작중, 대기, 멈춤, 좀비

  * zombie : 에러 상태, 정상 종료 또는 정상 실행되지 않은 프로세스 CPU의 사용량에 영향을 미친다.

 (3째 줄) %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.2 hi, 0.1 si, 0.0 st

-> CPU의 상태를 보여준다. %비율임.

 * 99.3 id (idle tome) : 현재 CPU의 여유율 즉 99.3% 만큼 쉬고있는 상태.

 * 0.2 us, 0.2 sy (user time) + (sys time) : 유저와 시스템의 영역에 따른 점유율 (합이 80% 이상이면 CPU 증설 필요)

 * 0.0 wa (wait IO) : DISK 작업 존재 유무, MEMORY 부족하지 않은지 점검필요. 

 (4/5째 줄) MiB Mem : 2808.6 total, 234.3 free, 1310.8 used, 1263.6 buff/cache

                MiB Swap: 3100.0 total, 3081.5 free, 18.5 used. 1300.2 avail Mem

-> 메모리의 상태를 보여준다, 총사용가능, 사용된, 사용할수있는, 공유, 버퍼로 사용된 메모리, 스왑 메모리 등의 정보를 볼 수 있다. 각각의 시스템 자원에 따른 프로세스 점유율을 확인할 수 있다.

 * free CMD 입력 시 memory 의 점유율을 확인할 수 있다.

 

 2) top 내에서 추가 커맨드.

f : 정렬 기준 필드를 변경한다. 진입된 화면 내에서 방향키를 통해 원하는값에서 's' 입력시 설정 가능하다.

k : top 화면 내에서 kill CMD를 사용한다. ( 기본적으로 점유율이 가장 높은 프로세스가 타겟이된다 )

h : 입력 할 수 있는 다양한 커맨드들을 확인 할 수 있다.

 

 3) 서버 시스템(운영체제) 모니터링 Tool (CPU/MEM/DISK/NETWORK)

top/htop : CPU/MEM

iotop : DISK I/O

iftop : NETWORK I/O

atop : CPU/MEM/DISK/NET, Data Gathering (데이터 수집)

 * htop, iftop, atop 의 경우 centOS 의 yum repository에 존재 하지 않는다.

 * htop, iftop, atop 패키지는 EPEL repository통해 받아야한다

yum install -y epel-release utils(관리 명령어툴) 을 이행하면 EPEL repository 도 이용가능하다.

이후 yum install -y htop iotop iftop 등 이용가능하다. 

 

 

5. 프로세스 기타 관리 명령 

 1) lsof : 프로세스에 의해 열려진 파일들의 대한 정보를 볼 수 있다 (장애처리시 주로 활용됨)

* lsof [FILENAME] : 현재 파일을 사용중인 사용자를 보여줌

* lsof -c [데몬NAME] : 현재 데몬이 열고있는 파일을 목록

* lsof -p [PID번호] : 현재 PID 가 열고있는 파일의 목록

[참고] netstat : 네트워크의 상태정보

 lsof -i 를 활용하면 네트워크 소켓 즉 포트들도 볼수 있으나 주로 포트나 소켓 관련 정보는 netsatat 를 활용하여 볼수 있다. 

* netstat -an(t/u)p : t = tcp의 관련 정보 / u = udp의 관련정보 / -p : 프로세스들의 정보

  

2) pmap (pmap [PID]) :  프로세스가 사용하고 있는 메모리의 주소를 확인할 수 있다. 

 

3) pstree : 실행중인 프로세스의 상태를 트리리구조로 보여주는 명령어

 pstree [PID] : 해당 PID 의 종속된 프로세스들을 확인

 pstree [USERNAME] : 해당 user의 종속된 프로세스들을 확인

* 주로 활용되는 포멧 : pstree -alup [PID] : 입력된 커맨드 및 옵션, PID 번호, 상세정보까지 모두 적용됨.

 

4) nicd / renice : 프로세스의 우선권을 부여 할 수 있다. 

* 우선순위 : 프로세스가 운영체제의 CPU를 선점할 수 있는 권한.

* 우선권의 범위 -20 ~ 19 nice 값이 적을수록 우선순위가 높아진다.

 (1) nice : 프로세스를 실행할 때 우선순위를 설정할 수 있는 CMD

 (2) renice : 실행중인 프로세스의 우선순위를 조정할 수 있는 CMD

nice -n (-20~19) [CMD] : [CMD] 의 nice 값을 지정하며 실행 또는 동작 (기본값 : 0)

renice -n (-20~20) [PID] : 프로세스의 nice 값을 조정

 

곧.. 기초가 끝난다아~~