본문 바로가기
네트워크/Linux

5. 프로세스 관리

by Testengineer 2021. 12. 11.
반응형

1. 개념 및 유형

(1) 프로세스의 개념
프로세스는 CPU와 메모리를 할당받아 실행시키는 프로그램이다. 프로세스들마다 고유의 프로세스 ID(PID)를 할당받는다. 가장 먼저 실행되는 프로세스는 init이다. init의 PID는 1이다. 프로세스 init에 의해 다른 모든 프로세스들이 시작된다.
(2) 프로세스의 유형
foreground process & background process
foreground process : 사용자와 상호작용하는 프로세스, 터미널에 직접 연결되어 입출력을 주고받는 프로세스. 명령 입력 후 수행 종료까지 기다려야 하는 프로세스
backgroundprocess : 사용자와 직접적인 대화를 하지 않고 뒤에서 실행되는 프로세스. 사용자 입력에 관계없이 실행됨. 실행은 되지만 화면에 나타나지 않고 실행되는 프로세스.
fork()와 exec()

fork( ) : 새로운 프로세스를 만들 때 기존 프로세스를 복제하는 방식. 새로운 프로세스를 위한 메모리를 할당한다. 원본 프로세스를 parent process라고 부르고, 새로 복제된 프로세스를 child process라고 부른다.
exec( ) : 호출하는 프로세스가 새로운 프로세스로 변경되는 방식이다. 새로운 프로세스를 위한 메모리를 할당하지 않는다. 호출한 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌워 버린다. exec( )를 호출한 프로세스가 아닌 exec( )에 의해 호출된 프로세스만 메모리에 남게 된다.

데몬(Daemon) : 리눅스 시스템이 부팅시 자동으로 실행되는 백그라운드 프로세스이다. 메모리에 상주하면서 사용자의 특정 요청이 오면 즉시 실행되는 대기 중인 서버 프로세스이다. 주기적이고 지속적인 서비스 요청을 처리하기 위해 실행된다. 사용자들은 이 프로세스들을 볼 수 있는 권한이 없다.
리눅스에서 데몬을 실행하는 방법

standalone Daemon - 서비스 요청이 들어오기 전, 서비스가 메모리에 상주하는 단독 실행 방식
- 독립적으로 수행되며 서비스 요청에 응답하기 위해 항상 메모리에 상주
- 빠른 응답속도를 요하는 경우에 사용
- 메모리에 항상 상주하므로 메모리 점유로 인한 서버 부하가 큼
- 실행 스크립트 위치는 /etc/inetd.d/
- 관련 서비스 : http, mysql, nameserver, sendmail
inetd Daemon
(슈퍼 데몬)
- inetd는 다른 데몬들의 상위에 존재하는 standalone daemon
- inetd는 자체적으로 하나의 독립 데몬이지만 여러가지 다른 서비스들을 제어하고 관리
- 보안상의 이유로 리눅스 커널 2.4부터 xinetd가 inetd역할을 수행
inetd type Daemon - inetd 타입 데몬들은 직접 서비스를 가동하지 못하고 inetd 데몬이 활성화가 되어야만 해당 서비스 제공
- Telnet, FTP, rlogin과 같은 데몬들이 inetd 타입 데몬에 해당함
- inetd 서비스 요청이 종료되면 inetd타입 데몬들도 자동 종료됨
- 실행 스크립트 위치는 /etc/xinetd.d/


시그널(Signal) : 시그널은 프로세스에게 이벤트 발생을 전달해주는 소프트웨어 인터럽트. 시그널이 프로세스에게 전달될 때 4가지 상황이 발생함

  • SIG_IGN(SIG_PF)1 : 운영체제에 의해 시그널이 무시됨
  • SIG_ERR(SIG_PF)-1 : 운영체제는 프로그램을 강제로 종료함
  • SIG_DFL(SIG_PF)0 : 진정한 시그널 처리 루틴을 실행함
  • SIG_HOLD(SIG_PF)2 : 시그널이 블로킹됨

시그널 리스트를 확인할때는 명령어 kill -l을 사용한다.

번호 시그널 발생 조건 기본 동작
1 SIGHUP 터미널과 연결이 끊어졌을때 종료 후 재시작
2 SIGINT Ctrl+c 입력시 종료
3 SIGQUIT Ctrl+\ 입력시 코어덤프
6 SIGABRT abort(비정상종료) 함수에 의해 발생 코어덤프
9 SIGKILL 프로세스 강제 종료시 종료
13 SIGPIPE 종료된 소켓에 쓰기를 시도할때 코어덤프
14 SIGALRM 알람 타이머 만료시 코어덤프
15 SIGTERM Kill 시스템 호출시 종료
17 SIGCHLD 자식 프로세스가 종료시 무시
18 SIGCONT 중지된 프로세스 실행시 무시
19 SIGSTOP SIGCONT 시그널을 받을때까지 종료
20 SIGTSTP Ctrl+z 입력시 프로세스 대기로 전환

2. 프로세스 유틸리티

(1) 프로세스 관련 명령어
ps [옵션]

옵션 설명
a 현재 실행중인 모든 프로세스 출력
e 모든 프로세스 정보
u 사용자 이름과 프로세스 시작 시간 출력
x 접속된 터미널뿐만 아니라 사용되고 있는 모든 프로세스들을 출력
l 자세한 정보 출력

ps는 현재 실행 중인 프로세스의 상태를 보여주는 명령어이다. CPU 사용도가 낮은 순서로 출력한다.
좀비 프로세스는 kill 시그널을 받아도 종료되지 않는다. 이 프로세스는 이미 현재 프로세스에 대한 모든 정보가 메모리에서 사라졌음에도 부모 프로세스가 정상 종료 처리되지 않아서 발생한다.
ps aux 명령어는 현재 시스템 사용자가 사용하고 있는 프로세스의 모든 정보를 확인할 수 있다.

  • USER : 프로세스 소유자명
  • PID : 프로세스 식별번호
  • %CPU : cpu 사용 비율의 추정치
  • %MEM : 메모리 사용 비율의 추정치
  • VSC : 가상메모리 사용량
  • RSS : 실제메모리 사용량
  • STAT : 현재 프로세스의 상태코드
  • TIME : 총 CPU 사용시간
  • TTY : 프로세스와 연결된 터미널번호
  • START : 프로세스 시작시간
  • COMMAND : 실행 명령


pstree [옵션]

옵션 설명
-p 프로세스 ID 표시
-n 프로세스 ID를 정렬해서 표시
-a 명령행 인자를 포함한 정보를 트리구조에 표시
-h 현재 프로세스와 해당 프로세스의 부모 프로세스를 음영으로 강조해서 표시

pstree 명령어는 실행중인 프로세스들을 트리구조로 나타낸다.

jobs [옵션] [작업번호]

옵션 설명
-l 프로세스 그룹 ID를 state 필드 앞에 표시
-n 프로세스 그룹 중 대표 프로세스 ID표시
-p 프로세스 ID를 한 행씩 표시

명령어 jobs는 작업이 중지된 상태, 백그라운드로 진행 중인 상태, 변경되었지만 보고되지 않은 상태 등을 표시한다. 출력된 목록에서 +는 현재 작업 실행, -는 앞으로 실행될 작업(대기 상태 작업)을 나타낸다.

bg %작업번호 or bg 작업번호
명령어 bg는 현재 실행 중인 프로세스를 백그라운드 작업으로 전환한다. 포그라운드에서 백그라운드로 전환시, 먼저 실행중인 작업을 일시 중지시킨 후(Ctrl+z) bg 명령을 수행한다.
fg %작업번호 or fg 작업번호
명령어 fg는 현재 백그라운드로 실행 중인 명령을 포그라운드로 전환한다. 작업 번호를 부여하지 않으면 현재 수행 중인 작업을 포그라운드로 전환한다. 포그라운드 작업을 종료하려면 Ctrl+c를 입력한다.

kill [옵션] [시그널번호 또는 시그널이름] [PID 또는 %작업번호]

옵션 설명
-l 시그널 종류 나열
-s 시그널번호
-s 시그널명
전달할 시그널의 종류를 지정
-1 -HUP, 프로세스를 재시작
-9 프로세스를 강제로 종료


killall [옵션] 프로세스명

옵션 설명
-g 그룹을 지정하여 프로세스를 종료
같은 프로세스 그룹에 속한 여러 프로세스가 발견되더라도 시그널은 그룹별로 한번만 보내짐
-i 프로세스 종료 전 확인 메시지 표시
-l 시그널 목록 표시
-v 상세 정보 표시

같은 데몬의 여러 프로세서를 한 번에 종료시킬 때 사용한다. 프로세스명으로 연관된 프로세스들을 종료시킨다.

nice [옵션] 프로세스명

옵션 설명
-n 조정수치
-조정수치
--adjustment 조정수치
명령의 우선권에 조정수치를 더함(양수값: - , 음수값: --)

프로세스 사이의 우선순위를 확인하고 우선순위를 변경할 수 있는 명령어이다. NI값을 조정하여 프로세스의 우선순위를 변경한다. 조정할 수 있는 NI값의 범위는 -20(가장 높은 우선권)~19(가장 낮은 우선권)이다. 우선순위 0의 값을 가지며 값이 작을수록 우선순위가 높다. 옵션 -n을 사용하지 않으면 디폴트는 10이다. 일반 사용자는 nice 값을 증가시킬 수밖에 없고, root는 nice값을 감소시켜 우선순위를 높일 수 있다.
NICE 값이 '프로세스의 실행 우선순위가 높다'라는 의미는 실행 우선순위가 낮은 프로세스보다 더 많은 시스템 자원을 할당하게 되므로 실행 속도가 빨라지게 된다는 것을 뜻한다. 즉, NICE값으로 프로세스의 실행 우선순위를 설정한다.

renice [옵션] NI값 PID

옵션 설명
-p 프로세스 ID 지정
-u 사용자명 지정
-g 프로세스의 GID 지정

이미 실행 중인 프로세스의 우선순위를 변경하는 명령어이다. 프로세스 소유자와 루트 권한자만이 명령을 내릴 수 있다. 우선순위 변경 시 프로세스 ID, 사용자명, 프로세스 그룹 ID를 사용한다. nice는 양수 값에 -, 음수값에 --를 사용하지만 renice는 양수값에 -를 사용하지 않는다.

top [옵션] [PID]

옵션 설명
-d 시간 실시간 화면 출력 시간 지정(초단위)
-p PID 모니터할 프로세스ID(PID) 지정

리눅스 시스템의 운영상태를 실시간으로 모니터링하거나 프로세스 상태를 확인할 수 있다. 기본적으로 5초에 한 번씩 실시간으로 시스템 상태 정보가 갱신된다. top이 실행된 상태에서 다양한 명령을 입력하여 프로세스 상태를 출력하거나 제어할 수 있다.

nohup
프로세스가 중단되지 않고 백그라운드로 작업을 수행할 수 있게 한다. 사용자가 로그아웃하거나 작업 중인 터미널 창이 닫혀도 실행 중인 프로세스를 백그라운드 프로세스에서 계속 작업할 수 있게 한다. 백그라운드로 실행될 수 있도록 명령행 뒤에 '&'를 명시한다. 실행중인 프로세서의 표준 출력 결과는 nohup.out이라는 파일을 생성하여 기록한다. 작업 디렉터리에 쓰기가 불가능할 경우 $HOME/nohup.out 파일을 자동으로 생성하여 기록한다.

tail [옵션] [파일명]

옵션 설명
-f 파일의 10줄을 출력하고 파일의 내용을 실시간으로 출력
-n N N 개수만큼의 라인을 출력


(2) 스케줄링과 cron
주기적으로 반복되는 일을 자동적으로 실행될 수 있도록 설정한다. 스케줄링 데몬은 "crond"이며, 관련 파일은 /etc/crontab이다.

  • 시간별 : /etc/cron.hourly/
  • 일별 : /etc/cron.daily/
  • 주별 : /etc/cron.weekly/
  • 월별 : /etc/cron.monthly/

ex) 백업 스크립트 파일 /etc/backup.sh를 매주 화, 목요일 오전 4시에 실행 > /etc/crontab에 *4**2,4 /etc/backup.sh
기호 *은 모두, -은 연속된 설정값 지정, ,은 비연속적 설정값, /은 지정된 범위에서 일정주기를 지정할때 사용한다.

분(min) 시(hour) 날(day) 달(month) 요일 명령어
* 4 * * 2,4 /etc/backup.sh


crontab [옵션] 파일명

옵션 설명
-l crontab에 설정된 내용출력
-e crontab을 작성하거나 수정
-r crontab 내용 삭제
-u 특정 사용자의 일정 수정

반응형

'네트워크 > Linux' 카테고리의 다른 글

7. X-Windows  (0) 2021.12.25
6. 리눅스 프로그램 & 주변장치 연결  (0) 2021.12.18
4. Shell  (0) 2021.12.04
3. 파일 시스템 관련 명령어  (0) 2021.11.27
2. Partition & Boot Manager  (0) 2021.10.30

댓글