본문 바로가기

Linux

[리눅스 마스터 2급] 1과목 리눅스 운영 및 관리, 프로세스 관리

Chapter03 프로세스 관리

Section 01 개념 및 유형
1. 프로세스의 개념     

CPU와 메모리를 할당받아 실행시키는 프로그램, 가장 먼저 실행되는 프로세스 init, init의 PID는 1

 

2. 프로세스의 유형

포어그라운드 프로세스

보통 셸에서 명령을 실행하면 fg 프로세스로 진행됨, 화면에 실행되는 것이 보이는 프로세스

사용자와 상호작용하는 프로세스, fg 작업번호 or fg %작업번호 : 백그라운드 프로세스를 포어그라운드 프로세스로 전환

터미널에 직접 연결되어 입출력을 주고받는 프로세스, 명령 입력 후 수행 종료까지 기다려야 하는 프로세스

ex. 응용 프로그램, 명령어

포어그라운드에서 프로세스를 백그라운드 프로세스로 전환하기 위해 작업 중인 프로세스를 대기(suspend) 상태로 전환하는 키 조합 : ctrl z

 

백그라운드 프로세스

사용자와 직접적인 대화를 하지 않고 뒤에서 실행되는 프로세스, 사용자의 입력에 관계 없이 실행되는 프로세스, 실행은 되지만 화면에 나타나지 않고 실행되는 프로세스, 사용자의 입력에 관계없이 실행되는 프로세스, 작업 상태는 jobs 명령으로 확인 가능, 사용자가 가장 늦게 실행한 프로세스에 + 기호가 붙음

실행 명령 뒤에 &를 붙여야 실행(백그라운드임!), bg 프로세스로 명령을 실행하면 작업번호와 PID를 반환

ex. 데몬, 시스템 프로그램

ex. [root@ihd~ ]#jobs

[1]- Stopped vi a.txt

[2]+ Stopped vi b.txt 

[3] Running   find/-name '*.txt'>list.txt

 

 

시스템 프로세스 호출 방법

명령어 fork

보통의 명령어는 fork 방식 수행, 새로운 프로세스를 위해 메모리를 할당받아 복사본 형태의 프로세스를 실행

 

명령어 exec

프로세스 생성 한 방법, 새로운 프로세스를 원래의 프로세스의 자식 프로세스로 관리하는 방식, 새로운 프로세스를 위한 메모리를 할당하지 않고 호출한 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌워 버림

execute =새로운 프로세스를 실행/현재 프로세스를 대체


데몬(Daemon) = 백그라운드 대기조

리눅스 부팅 시 자동 실행되는 백그라운드 프로세스, 메모리에 상주하면서 특정 요청이 오면 즉시 실행되는 대기 중인 서버 프로세스

주기적이고 지속적인 서비스 요청을 처리하기 위해 실행, 일반적으로 데몬 스크립트 파일은 /etc/init.d에 들어있음

 

리눅스에서 데몬을 실행하는 방법 3가지

빈번 요청 : standalone, 상주해서

사용자 많은 서비스 : standalone

처리 속도 : standalone, 언제든 응답, 부팅 시 자동 시작

메모리 관리 : inetd, 항상 상주하지 않아서

standalone 데몬 - 서비스 요청이 들어오기 서비스가 메모리에 상주하는 단독 실행 방식
- 독립적으로 실행되는 데몬 프로세스
- 다른 프로세스나 터미널에 의존하지 않고 시스템에서 직접 실행되는 서비스나 백그라운드 프로세스 - 항상 메모리에 상주, 서비스 요청이 있을 때 언제든 바로 응답
 -
init 프로세스(PID 1)를 부모 프로세스로 가지며, 시스템 부팅 시 자동으로 시작되고 종료
- 일반적으로 서비스나 서버 역할을 수행하는 데몬이 많음.
ex. 웹 서버(HTTPD), 파일 서버(Samba), 데이터베이스 서버(MySQL) 등이 이에 해당,
inetd 데몬(슈퍼 데몬) - 특정 데몬이 여러 데몬을 관리하면서 서비스 요청이 들어왔을 때 관련 프로세스를 메모리에 상주시키는 방식
- 다른 데몬들의 상위에 존재하는 standalone 데몬
- 프로세스가 메모리에 항상 상주하지x
- 효율적인 메모리 관리에 유용(inetd > standalone)
inetd 타입 데몬 inetd 타입 데몬들은 직접 서비스를 가동하지 못하고 inetd 데몬이 활성화가 되어야만 해당 서비스 제공

 

웹 서버 데몬 구동 방법

service httpd start

/etc/init.d/httpd restart

/etc/rc.d/init.d/httpd restart

 

*standalone 타입의 데몬으로 실행 방법

service 서비스명 실행옵션 or /etc/init.d/서비스명 [실행옵션]

 

4) 시그널

프로세스에게 이벤트 발생을 전달해주는 SW 인터럽트, 명령어 kill -l시그널 리스트를 확인할 수 있음

지정된 이벤트의 시그널이 프로세스에 전달될 때 어떤 상황(기본 동작)이 발생하는지 확인

특정 프로세스가 다른 프로세스에게 메시지를 보낼 때 시그널을 이용

번호 시그널 발생 조건 기본 동작
1 SIGHUP 터미널과 연결이 끊어졌을 때 종료 후 재시작
2 SIGINT
(키보드로부터 오는 인터럽트 시그널 (delete) 로 실행을 중지)
Ctrl+C 입력 종료
3 SIGQUIT Ctrl+\ 코어덤프
9 SIGKILL
프로세스를 강제로 종료시키는 시그널 강제 종료
(프로세스가 처리 불가능)
15 SIGTERM (Signal Terminate)
Linux 시스템에서 프로세스를 정상적으로 종료하도록 요청하는 시그널
kill 명령어를 기본적으로 실행하면 이 SIGTERM이 전송돼.
Kill 시스템 호출 시 종료
19 SIGSTOP SIGCOUNT 시그널을 받을 때까지 종료
20 SIGSTP Ctrl+z 프로세스 대기로 전환

 


*kill 명령 실행 시에 기본적으로 전송되는 시그널 번호? 15 

 

*HUP(hang up)  전화 끊어~

Hang Up 신호는 리눅스 및 유닉스 계열 운영 체제에서 사용되는 신호 중 하나, 프로세스에게 세션 종료를 알리는 역할

주로 터미널 연결 종료프로세스 그룹 종료와 관련된 작업에서 사용, 특히 데몬 프로세스서버에서 설정을 재시작할 때 유용하게 사용

 

명령어 nohup 전화 끊지마~

실행한 명령을 자동으로 백그라운드로 보내지 않고, 사용자가 명령행 뒤에 &를 명시, 표준 출력과 표준에러는 nohup.out 파일을 생성해 기록, 쓰기 작업이 불가능한 경우 $HOME/nohup.out 파일을 생성해 기록, 프로세스가 중단되지 않고 백그라운드로 작업을 수행할 수 있게 함

사용자가 로그아웃하거나 작업 중인 터미널 창이 닫혀도 실행 중인 프로세스를 백그라운드 프로세스로 계속 작업할 수 있도록 함

bg로 실행될 수 있도록 명령행 뒤에 "&" 명시


Section02 프로세스 유틸리티

프로세스 관련 명령어

PID(Process Identification Number)

프로세스 각각을 구별할 수 있는 식별자

 

PPID(Parent PID)

프로세스를 만든 부모 프로세스의 PID

 

명령어 ps(process status)

ps [옵션

현재 실행 중인 프로세스의 상태를 보여주는 명령어, cpu 사용도가 낮은 순서로 출력

옵션 없이 실행 시 자신의 터미널에서 실행되고 있는 프로세스들의 관련 정보만 나타남

옵션

-a : 현재 실행 중인 모든 프로세스 출력(all)

-e : 모든 프로세스 정보(every)

-u : 사용자 이름과 프로세스 시작 시간 출력(user), 프로세스를 실행한 사용자 정보와 함께 출력

-x : 로그인 상태에 있는 동안 아직 완료되지 않은 프로세스를 보여줌, 유닉스 시스템은 사용자가 로그아웃하고 난 후에도 임의의 프로세스가 계속 동작 가능, 동작 중인 데몬을 확인할 때 사용, 터미널이 없는 프로세스(백그라운드 프로세스)도 포함해서 출력, 접속된 터미널뿐만 아니라 사용되고 있는 모든 프로세스들을 출력(exclude controlling terminal)

-l : 자세한 정보 출력(long)

 

ps 명령의 상태 코드 6가지

-Z(zombie) : 좀비 프로세스, 작업은 종료되었으나 부모 프로세스로부터 회수되지 않아 메모리를 차지하고 있는 정지(stopped) 상태

-R(Running)

-S(Sleeping)

-T(Terminated)

-W(Waiting)

- I(Intermediated)

 

*ps aux 

RSS 출력됨(실제 메모리의 용량)

 

 

 

명령어 pstree

init 프로세스가 모든 프로세스의 부모 프로세스임을 확인, 실행 중인 프로세스들을 트리구조로 나타냄

pstree [옵션]

 

명령어 jobs

현재 세션의 작업 상태(작업이 중지된 상태, 백그라운드로 진행 중인 작업 상태, 변경되었지만 보고되지 않은 상태 등)를 표시, 작업이 중지된 상태, 백그라운드로 진행 중인 상태, 변경되었지만 보고되지 않은 상태 등을 표시

jobs [옵션] [작업번호]

 

bg와 fg

bg %작업번호 또는 bg 작업번호

fg에서 bg로 전환 시, 실행 중인 작업을 일시 중지시킨 후(ctrl + z), bg 명령 수행

 

명령어 kill

프로세스를 종료시킨다. kill [옵션] [시그널번호 또는 시그널이름] [PID 또는 %작업번호]

기본적으로 전송되는 시그널 번호 : 15

옵션 

-ㅣ : 시그널 종류 나열

-s : 시그널번호 or -s 시그널명 : 전달할 시그널의 종류를 지정

-1 : -HUP, 프로세스를 재시작

-9 :  프로세스를 강제로 종료

kill -HUP 1234 : PID가 1234인 프로세스에게 1번 시그널을 보냄

kill 1234 : PID가 1234인 프로세스에게 15번 시그널을 보냄, PID 1234인 프로세스에게 **SIGTERM(15번 시그널)**을 보내 정상 종료 시도

명령어 killall

같은 데몬의 여러 프로세서를 한 번에 종료시킬 때 사용

 

명령어 nice

프로세스 사이의 우선순위를 확인하고 우선순위를 변경할 수 있는 명령어

nice [옵션] 프로세스명, -20(최고 우선순위) ~ 19(최저 우선순위)

디폴트는 10을 사용, 일반 사용자는 nice 값 증가, root는 nice 값 감소시켜 우선순위 높일 수 있음

nice --10 : NI 값을 -10만큼 감소시켜 우선순위를 높임

옵션

-n 조정수치

-조정수치

--adjustment 조정수치

양수값 : -, 음수값 : --

 

명령어 renice

프로세스 증가 없이 우선순위 변경, 이미 실행 중인 프로세스의 우선순위를 변경

renice [옵션] NI값 PID

renice --10 14164

renice [옵션] ni값 pid

 

 

명령어 top

서버 평균 부하율, CPU 사용률, 메모리 사용현황, 스왑 메모리 사용 현황, 모든 프로세스들의 자원 현황 확인 가능
실행 상태에서 다양한 명령을 입력하여 세스 상태를 출력하거나 제어할 수 있음

옵션

-k(kill) : PID값을 입력하여 종료신호를 보냄

-t(toggle) : 프로세스와 cpu 항목을 on/off

-m(memory) : 메모리 관련 항목을 on/off

-W(write) : 바꾼 설정을 저장

-R(renice) : renice를 할 PID를 입력하여 우선순위를 변경

 

 

명령어 tail

파일의 마지막 행을 기준으로 지정한 행까지 파일 내용의 일부를 출력, 기본값으로 마지막 10줄을 출력

tail [옵션][파일명]

 

스케줄링과 cron

명령어 at

지정된 명령어나 스크립트를 한 번만 자동 예약 후에 실행하는 명렁어

 

명령어 crontab

cron 작업을 제출, 편집, 나열 또는 제거한다. 정해진 시간에 주기적으로 자동 실행,
tab → **테이블(table)**을 의미하며, 작업 목록을 저장하는 파일

crontab [옵션] [-u 사용자ID]

crontab -e -u ihduser : 특정 사용자의 crontab 내용을 작성

 

/etc/cron 파일

일정 주기별로 특정 동작을 수행시켜 주는 명령어

 

/etc/crontab 파일

특정 시간에 특정 프로그램을 주기적으로 실행시켜 주는 명령어, cron을 이용해서 시스템 운영에 필요한 작업을 예약할 때 설정하는 파일명

 

/etc/cron.d

/etc/cron.deny 및 cron.allow를 사용하여 crontab 명령에 대한 액세스를 제어

 

옵션

-e(editor) : 특정 사용자에게 cron 작업을 제출, 크론 작업을 편집하는 옵션 (기본 편집기가 열림)

-u : 루트 계정에서 다른 사용자(ihd)의 크론 작업을 수정할 수 있어.

-r [username] : 지정된 사용자의 파일을 지움

-d(delete) : crontab에 등록된 내용 삭제

-l(list) : 지정된 사용자에게 등록된 리스트 출력