교재: "국가공인" 리눅스마스터 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 설정 파일 설명]
'기타 > 리눅스 마스터' 카테고리의 다른 글
리눅스마스터1급(3.2 네트워크 설정) (0) | 2015.08.16 |
---|---|
리눅스마스터1급(3.1 네트워크 기초) (0) | 2015.08.16 |
리눅스마스터1급(2.4 쉘) (0) | 2015.08.16 |
리눅스마스터1급(2.3 X 윈도우) (0) | 2015.08.16 |
리눅스마스터1급(2.2 리눅스의 구조) (0) | 2015.08.16 |