교재: "국가공인" 리눅스마스터 1급 ((주)수퍼유저, 저자 박성수, 강기봉, 정우영)


국가공인 리눅스마스터 1급

저자
박성수강기봉 지음
출판사
수퍼유저코리아 | 2014-01-13 출간
카테고리
컴퓨터/IT
책소개
국가공인 리눅스마스터 1급 교재이다. 리눅스마스터 1급 1차, ...
가격비교

 



Part1. 리눅스 실무의 이해

Chapter 02. 리눅스 시스템의 이해

2.5 프로세스

2.5.1 프로세스의 개념 및 종류

2.5.2 프로세스 관리의 이해



방대한 책범위와 시험기간이 얼마 안남은 관계로 전략변경

- 빠른 시일내에 책 훑기

- 문제를 풀면서 내용 정리


- 업데이트 할 목록

-> 프로세스 개념, 프로세스 관리, 데몬


- 업데이트 날짜: 2015-08-28





- 프로세스 관리  

- 프로세스는 메모리에 상주핳여 실행중인 응용 프로그램이다. 응용 프로그램이란 프로세스가 인식 가능한 기계어로 구성되어 디스크에 저장되어 있는 코드의 집합이다. 응용 프로그램이 사용자 또는 커널에 의해 수행이 요청되었을 때 메모리에 적재되고 실행 가능한 상태로 전환되며 이를 프로세스라 한다. 프로세스는 태스크나 작업이라 불리기도 하며 동일한 의미를 가진다.


- 프로세스 상태

- 일반적으로 프로세스의 상태는 총 5단계로 프로세의 생성과 준비, 실행, 대기, 종료로 나뉜다.

1) 프로세스의 생성 단계(New)

- 프로세스의 생성 단계는 프로세스 수행을 위해 메모리 공간을 할당하고 응용 프로그램 코드를 메모리에 적재하는 단계이다.

2) 프로세스 준비 단계(Ready)

- 프로세스 준비 상태는 프로세스가 대기 큐에 삽입되어 스케줄러에 의해 CPU를 할당받아 수행되기를 기다리는 상태이다.

3) 프로세스 실행 단계(Running)

- 프로세스 실행 단계는 스케줄러로부터 CPU를 할당받아 수행하는 상태이다. 단일 CPU 시스템에서 실행상태에 있는 프로세스는 단 하나만 가능하다.

4) 프로세스 대기 상태(Waiting)

- 프로세스 대기 상태는 다른 프로세스로부터의 결과가 필요하거나 어떤 특정 시그널이 발생이 필요한 것과 같이 프로세스에 특정 이벤트가 발생하기를 기다리고 있는 상태이다.


- 리눅스에서의 프로세스 상태

- 리눅스 프로세스 상태는 프로세스 디스크립터의 state필드의 값으로 표현된다.

state 필드 값이 -1이면 실행할 수 없는 상태를 나타내고 0은 프로세스가 실행중인 상태, 0보다 큰 값은 멈춤상태를 나타낸다.

1) TASK_RUNNING

프로세스가 실행중이거나 실행 준비중인 상태

2) TASK_INTERRUPTIBLE

하드웨어 인터럽트가 발생하거나 프로세스가 필요한 자원을 사용할 수 있을때까지 대기하는 상태

3) TASK_UNINTERRUPTIBLE

외부에서 인터럽트를 받아도 프로세스 상태가 바뀌지 않음. 프로세스가 대기중에 외부의 이벤트로부터 방해 받지 않아야 하는 경우의 상태

4) TASK_STOPPED

외부로부터 SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU 와 같은 프로세스 작업을 중단시키는 시그널을 받아서 프로세스의 실행이 중단된 상태

5) TASK_TRACED

리눅스 커널 2.6버전에 추가된 프로세스 상태로 ptrace() 시스템 호출을 사용하여 다른 프로그램을 감시할 때 기존에는 프로세스를 TASK_STOPPED 상태로 변경하였으나 커널 2.6버전에서는 TASK_TRACED 상태로 변경

6) TASK_ZOMBIE

프로세스 실행이 종료되었지만 해당 프로세스의 부모 프로세스가 wait()나 waitpid() 와 같이 종료된 자식 프로세스 정보를 가지지 않는 경우 발생(자식프로세스가 종료 된 후 부모 프로세스는 자식 프로세스의 종료 상태값을 wait()나 waitpid()를 통해 요청할 있는데 이 때 자식 프로세스에 대한 프로세스 정보들을 메모리 상에 유지하고 있는 상태)

7) TASK_DEAD

프로세스 종료 상태


- 프로세스 상태코드(STAT)

- D(disk wait) : 디스크 입출력 대기같은 인터럽트 할 수 없는 대기 상태

- R(running or runable) : 프로세스가 실행중이거나 실행큐에 들어있는 실행 가능 상태

- S(sleep) : 인터럽트 가능한 대기 상태

- T(stopped) : 프로세스가 ^Z나 트레이스 명령 등으로 멈춘 상태

- W(paging) : 가상 메모리 사용 중.(2.6버전 커널부터 사용하지 않음)

- X(dead) : 실행 종료. 이후 나타나지 않음

- Z(zombie) : 좀비 프로세스


- 제어

1. bg/ fg

- 다중 작업을 위한 프로세스 명령어

- 프로그램을 실행 시킬 때, 일반적으로 그냥 실행시키면 포그라운드로 실행되고 명령어 끝에 &를 붙이면 백그라운드에서 실행

- 포그라운드는 사용자가 한 번에 하나의 명령만 수행 시킬 수 있었으나, 백그라운드는 한번에 여러 개의 명령 수행 가능

# sleep 1000 &

2. nohup

- SIGHUP(1, 연결 끊기), SIGTERM(15, 소프트웨어 종료)로 부터 보호하고, 터미널 없이 프로세스가 지속적으로 실행되게 만듦

- 종료나 중지를 무시하고 명령어를 현재 실행중인 프로그램이 있는 사용자가 로그아웃을 실행하게 되면 실행중인 프로그램도 같이 종료되는데 이런 경우 사용자가 로그아웃을 하더라도 실행중인 프로그램이 정상적으로 작업을 종료할 수 있도록 하는 명령어 실행 방법이 nohup

#nohup sleep 1000 &

로그아웃

로그인

#ps -ef | grep sleep

로그아웃 했어도 실행되는 것 확인 가능

3. jobs

- 백그라운드로 수행중인 모든 프로세스의 상태 출력

#sleep 10 &

#jobs

[1]+ Running     sleep 10 &

4. kill/ killall, pkill

- 프로세스에 특정 시그널을 보낼 때 사용

#kill [-옵션] pid

#killall [-옵션] 명령어

#pkill [-옵션] 프로세스 이름

- 옵션

-s: 전송할 시그널의 이름이나 번호 지정

-p: 전송할 시그널을 출력만 함

-l: 시그널 목록 출력


[signal 종류]


#kill 2344 (=kill -TERM)

#kill -9 2344

#kill -HUP 2344 (xinetd, sshd 등 수정된 config를 재 적용 시 주로 사용)

#killall -9 sshd

#pkill sshd (프로세스 이름으로 kill)


5. at, atq, atrm

- 특정 시간에 특정 작업 수행

- 지정한 작업은 queue(큐)에 저장되며 저장된 작업들은 /var/spool/at 디렉토리 아래 파일로 저장

- 옵션

-q queue : 작업의 대기큐를 지정한다. 사용할수 있는 큐는  a-z, A-Z     

-c job : 작업리스트를 출력

-d : 작업을 삭제(=atrm)

-l : 큐에 있는 작업들을 보여준다. root 인경우에는 모든 작업들의 목록을 보여줌(=atq)

-m : 실행한 결과를 메일로 통보

- 시간 지정

- 시간지정은 HHMM, HH:MM형태로 가능하고 am,pm 으로 구분 가능

am,pm 등의 표기가 없을 경우에는 24시 표현으로 함

날짜의 경우 MMDDYY, MM/DD/YY, MM.DD.YY 형태

now (현재시간), tomorrow(내일), today(오늘), teatime(16:00),noon(12:00), 

midnight(00:00)과 같은 문자열도 가능

- 관련 명령어

- atq

큐에 저장된 작업들을 보여주는 명령으로 at -l 실행결과와 같음

작업번호와 작업예정시간, 작업이 저장되어 있는 큐 보여줌

- atrm

예약된 작업을 취소할 때 사용하는 명령으로 큐에서 해당 작업 삭제

at -d와 같음


6. sleep

- 주어진 시간 만큼 지연

#sleep 3    //3초간 sleep



- 모니터링

1. top

- CPU 프로세스들을 출력, 매초별로 시스템 상태와 대부분의 프로세스들을 refresh 해서 실시간으로 화면에 보여줌

Line1: 시스템의 현재 시간과, uptime, 사용자수, 평균부하

Line2: 프로세스 상태

Line3: 사용자와 시스템, nice, 휴먼중인 프로세스 cpu 사용시간

Line4: 메모리상태

Line5: 가상메모리, 스왑상태


[#top]


top 명령을 실행했을 때의 각 항목에 대한 설명

PID: Process ID

USER: 소유자

PRI Priority (우선순위)

NI Nice Value: -20~19사이의 값으로 작을수록 우선순위가 높아진다

SIZE: 프로세스의 코드와 데이터의 크기 (KB 단위)

SHARE: 프로세스가 사용하는 공유 메모리의 양

STAT S:Sleeping    D:uninterruptible    R: Running    Z: Zombie    T: sTop or Trace

%CPU: CPU 사용시간 퍼센트

%MEM: 메모리 사용 퍼센트

TIME: 프로세스가 시작하여 사용한 총 CPU시간

COMMAND: 프로세스를 실행한 명령어 라인


- top을 실행 중, 명령 설명

space: 화면 갱신

h: 도움말

u: 사용자별

k: 프로세스 죽이기

M: 메모리 사용율로 sorting



2. ps

- 시스템에서 현재 실행중인(sleep상태 포함) 프로세스에 대한 정보를 각 PID와 각 프로세스의 부모 ID(PPID)를 표시해 줌


[옵션]

       

[출력 필드]


- 시스템 실행중인 전체 프로세스 확인

$ps -ef

- 시스템에서 실행중인 각 프로세스의 자원(CPU, Memory) 사용량과 상태 확인

$ps -aux


3. pstree

- 프로세스들을 계층적(트리구조)으로 출력해주는 명령어

- 모든 프로세스들은 명령 이름에 의해 리스트되고, 자식 프로세스는 부모 프로세스의 오른쪽에 나타남. 그러므로 최초로 실행되는 프로세스인 init(모든 프로세스의 궁극적인 부모)은 가장 왼쪽 상단에 출력

[옵션]

-a 각 프로세스의 명령행 인자까지 출력

-p PID 출력


#pstree -a



4. nice

- 프로세스의 우선순위 조정(최고 -20, 최저 19)

#nice -n 5 make


5. strace

-시스템콜, 시그널 추적


6. ltrace

-라이브러리 콜 추적






- 리눅스 서비스 데몬

1. init 데몬

- 시스템 부팅시 커널이 로딩이 된후 커널에 의해서 실행이 되는 프로세스로 프로세스 id 는 1이다. 파일시스템의 구조를 검사하고 파일시스템을 마운트, 서비스 데몬을 띄우고 사용자 로그인을 기다리고 사용자를 위한 쉘을 띄우는 역할을 한다.


[/etc/inittab 파일의 내용]


[/etc/inittab 파일 설명]



2. xinetd 데몬(Extended Internet Services daemon)

- xinetd는 inetd의 문제점들을 보완하고 기능이 추가 된 확장판이라고 할 수 있으며, 관련 파일들의 구성이나 설정면에서 다양한 옵션을 융통성 있게 제공하고 있어 접근설정이나 기타설정이 쉬움


- 기능

1. 접근 제어: hosts.allow, deny 파일을 사용하여 접근 제한 가능

2. Dos공격 방지: 연결요청에 대한 제한 가능, 로그파일 사이즈 제한으로 디스크 full 방지 가능

3. 확장 로깅 기능: 서비스별로 syslog 설정 가능, 접속 실패 기록 로그 기록 가능

4. 원격 호스트로 서비스 전달: TCP stream을 다른 호스트로 전달 

5. IPv6 지원


- 설치

xinet 홈페이지에서 소스다운이나 rpm을 통해 가능하며 ./configure, make, make install 순서


- 설정

default와 service에 대한 내용으로 구분

default는 /etc/xinetd.conf에, service에 대한 내용은 xinetd.conf에 따로 설정하여 /etc/xinetd.d 디렉토리에 서비스별로 서정 파일을 준비해 놓음


[설정 옵션]


[xinetd.conf 설정 예]


- xinetd 데몬 중지 및 시작

#service xinetd [stop/start]

또는

#/etc/init.d/xinetd [stop/start]


- xinetd 서비스 확인

#ps -ef | grep xinetd




3. sshd 데몬

- 유닉스를 비롯해 리눅스 시스템은 시스템 콘솔보다는 원격으로 telnet 등을 이용해 관리하는 경우가 대부분

- 원격으로 관리자 로그인시나 작업시 중요한 정보가 네트워크를 통해 암호화 되지 않고 전송이 될 경우 스니핑 등을 통해 패스워드를 비롯해 중요한 정보 유출 가능성 있음

-> 이를 방지하기 위해 telnet 프로그램을 대신하여 네트워크로 전송되는 모든 데이터를 암호화하여 보안을 강화한 프로그램이 sshd


- sshd 데모 중지 및 시작

#service sshd [stop/start/restart]

또는

#/etc/rc.d/initd/sshd [stop/start/restart]


- sshd 리부팅 시 자동 시작 설정

#chkconfig sshd on

#chkconfig -list | grep sshd

sshd        0:off    1:off    2:on    3:on    4:on    5:on    6:off


[sshd_config 설정 파일 설명]


+ Recent posts