320x100
320x100

프로세스

: 실행중인 프로그램

: 리눅스에서는 프로세스 마다 PID (Process Indentity)를 할당하여 관리

: 백그라운드 프로세스와 포어그라운드 프로세스 나뉨

: 프로세스의 생성 방법은 fork와 exec가 있음

 

- 백그라운드 프로세스 (background process)

: 사용자의 입력과 관계 없이 시스템 뒷단에서 실행되는 프로세스

 

- 포어그라운드 프로세스 (foreground process)

: 명령 입력 후 수행 종료까지 터미널에서 기다려야 하는 프로세스

 

- fork

: 메모리를 할당 받아 복사본 형태로 프로세스를 생성하는 방법

: 기존 프로세스를 실행하면서 기존 프로세스를 기반으로 새로운 프로세스를 생성

: 리눅스에서는 fork방식으로 init 프로세스가 다른 프로세스들을 실행시킴

 

- exec

: 기존 프로세스에 호출된 프로세스를 덮어씌우는 방법

: 메모리에 적재된 기존 프로세스의 내용을 새로운 프로세스로 덮어씀

 

 

 

 

 

시그널

: 프로세스 끼리 통신할 때 주고 받는 일종의 메시지

: 사용자 인터럽트, 프로세스가 보내는 메시지, 하드웨어가 보내는 메시지 등 다양한 곳에서 부터 송신됨

 

- 주요 시그널

: 1 - SIGHUP

 > 터미널에서 접속이 끊김

 > 데몬 환경설정 변경 후 변화된 내용 적용을 위한 재시작 시 사용

: 2 - SIGINT

 > 키보드로 부터 오는 실행 중지 시그널. CTRL + c

: 3 - SIGQUIT

 > 키보드로 부터 오는 실행 중지 시그널. CTRL + \

: 9 - SIGKILL

 > 프로세스 강제 종료

: 15 - SIGTERM

 > 프로세스를 정상적으로 종료

: 18 - SIGCONT

 > SIGSTOP 등으로 정지된 프로세스를 재시작

: 19 - SIGSTOP

 > 터미널에서 입력된 정지 시그널

: 20 - SIGSTP

 > 실행 정지 후 다시 실행을 계혹하기위해 대기. CTRL + z

 

 

 

 

 

데몬

: 주기적으로 지속적인 서비스 요청을 처리하기 위해 백그라운드에서 계속 실행되는 프로세스

: 시스템 데몬의 경우 보통 프로세스 이름뒤에 d를 붙음

: inetd 방식과 standalone 방식이 있음

 

- standalone

: 부팅 시에 실행되어 해당 프로세스가 메모리에 지속적으로 상주하면서 클라이언트의 요청을 처리하는 방식

: 웹, 메일과 같이 빈번한 요청이 들어오는 서비스인 경우

: ps 명령으로 확인 시 항상 동작중으로 나옴

 

- inetd

: 클라이언트의 서비스 요청이 들어왔을 때 관련 프로세스를 실행시키고 접속 종류 후에는 프로세스를 종료시키는 방식

: inetd 데몬만 메모리에 상주시키고 inetd 데몬이 관리하는 서비스에 대한 요청이 들어올때만

  관련 프로세스를 실행시켜 메모리에 상주시킨뒤 작업이 종료되면 프로세스를 종료

: 현재는 xinetd 데몬이 이를 수행하나, 시스템 메모리 용량이 커지면서 단독 데몬으로 실행하는 경우가 많아짐

 

 

 

 

 

프로세스 관련 명령어

- ps

- pstree

- top

- kill

- killall

- jobs

- fg

- bg

- nice

- renice

- nohup

- pgrep

- pkill

- service

 

 

 

 

 

ps

: process status 명령어로, 동작중인 프로세스의 상태를 출력

 

- 형식

: ps [option]

 

- 주요 옵션

: a

 > 터미널과 연관된 프로세스 출력

: u

 > 프로세스의 소유자를 기준으로 출력

: x

 > 터미널에 종속되지 않는 프로세스 출력.

: l

 > 프로세스에 대한 자세한 정보 출력. PRI 및 NI 값 등 확인

: e

 > 해당 프로세스에 관련된 환경변수 정보도 출력

: f

 > 프로세스간 상속관계를 트리구조로 출력

: p

 > 특정 PID 지정

: -A

 > 모든 프로세스 출력 

: -e

 > 모든 프로세스 출력

: -a

 > 세션 리더 (일반적으로 로그인 셸)을 제외하고 터미널에 종속되지 않은 모든 프로세스 출력

: -f

 > 유닉스 스타일로 출력. UID, PID, PPID 표시

: -C <proccess name>

 > 지정한 프로세스에 대해서만 출력

: -o <value>

 > 출력 포맷 지정

: -p

 > 특정 PID 지정

: -u

 > 특정 사용자의 프로세스 정보 확인. 미지정시 현재 사용자 기준으로 출력

 

- 주요 출력 항목

: USER

 > 프로세스를 실행한 소유자

: UID

 > 프로세스를 실행한 소유자의 UID

: PID

 > 프로세스 식별번호

: %CPU

 > CPU의 사용비율 추정치

: %MEM

 > 메모리 사용비율 추정치

: VSZ

 > kb 단위 혹은 페이지 단위 (4096kb)의 가상메모리 사용량

: RSS

 > 실제 메모리 사용량

: TTY

 > 프로세스와 연결된 터미널

: STAT

 > 프로세스의 상태 코드

: START, STIME

 > 프로세스가 시작된 시간

: TIME

 > 총 CPU 사용 시간

: COMMAND

 > 프로세스의 실행 명령행

: C, CP

 > 짧은 시간 동안의 CPU 사용률

: F

 > 프로세스의 플래그 (1: fork / 4: su)

: PPID

 > 부모 프로세스의 PID

: PRI

 > 실제 실행 우선순위

: NI

 > nice 우선순위

 

- STAT 주요값

: R (Running)

 > 실행중, 실행 Queue에 존재하는 상태

: S (Sleeping)

 > 인터럽트에 의해 특정 이벤트가 끝나기를 기다리는 상태

: D (Disk wait)

 > 디스크 입출력에 의해 대기하고 있는 상태

: T (Traced or stopped)

 > 정지된 상태 (suspended)

: Z (Zombie)

 > 작업은 종료되었으나 부모 프로세스로 부터 회수되지 않아 메모리에 남아있는 상태

: X 

 > 죽은 상태

: <

 > 우선순위가 인위적으로 높아진 상태

: N (nice)

 > 다른 사용자에 의해 우선순위가 인위적으로 낮아진 상태

: L

 > 메모리 안에서 페이지가 잠금된 상태

: s

 > session leader 임을 나타냄

: l

 > 멀티 쓰레드 상태

: +

 > 포어그라운드 프로세스 그룹

 

 

 

 

 

pstree

: 프로세스의 상태를 트리구조로 출력

: 왼쪽 (부모 프로세스) / 오른쪽 (자식 프로세스)로 출력 

 

- 형식

: pstree [option]

 

- 주요 옵션

: -a

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

: -h

 > 현재 프로세스와 해당 프로세스의 조상 프로세스를 하이라이팅하여 출력

: -n

 > 프로세스 이름 대신 PID 값으로 출력 (number sort)

: -p

 > PID 값을 함께 출력

 

 

 

 

 

top

: 동작중인 프로세스의 상태 및 정보를 실시간으로 화면에 출력

 

- 형식

: top [option]

 

- 주요옵션

: -d <time>

 > 갱신 시간 설정 (초 단위)

: -p

 > 특정 PID값을 가진 프로세스 모니터링

: -b

 > 배치모드로 실행. 보통 다른 프로그램이나 파일에 결과를 전송할때 -n과 함께 사용

: -n <value>

 > top 명령의 실행 횟수 지정 

 

- 주요 출력 항목

: PID

: USER

 > 소유자

: PR

 > 실제 우선순위

: NI

 > 설정된 우선순위

: VIRT

 > 가상 메모리 사용량 

: RES

 > 실제 메모리 사용량

: SHR

 > 사용중인 공유 메모리양

: S

 > 프로세스의 상태

: %CPU

 > CPU 사용량

: %MEM

 > 메모리 사용량

: TIME+

 > 프로세스가 시작되고 지난 시간

: COMMAND

 > 프로세스를 실행한 명령

 

- top 실행 후 사용하는 주요 명령

: SPACE

 > 화면 갱신

: h, ?

 > 도움말

: k

 > PID를 통해 프로세스 종료

: i

 > 좀비 및 idle 프로세스의 출력 on/off

: n, #

 > 출력하는 프로세스의 수 지정

: q

 > top 명령어 종료

: r

 > Nice 값 변경

: s

 > 화면 갱신 시간 변경

: F, f

 > 보여줄 항목을 추가하거나 삭제

: O, o

 > 보여줄 항목의 순서 변경

: l

 > top의 맨 윗줄의 출력 on/off (uptime)

: m

 > 메모리 관련 항목 출력 on/off

: t

 > cpu 관련 항목 출력 on/off

: c

 > command line 옵션 on/off

: M

 > RSS 값 기준으로 정렬

: P

 > %CPU 값 기준으로 정렬

: T

 > TIME 값 기준으로 정렬

: W

 > 바꾼 설정을 저장

 

 

 

 

 

kill

: 프로세스에 시그널을 전송

 

- 형식

: kill [option] [signal] [PID / %작업번호]

 

- 주요 옵션

: -l

 > 시그널의 종류 출력

: -s <signal>

 > 프로세스로 보낼 시그널 이름 입력

 

 

 

 

 

killall

: 같은 데몬에서 부터 실행된 여러 프로세스들을 종료

: 프로세스 이름을 기준으로 종료

 

- 형식

: killall [option] <process name>

 

- 주요 옵션

: -l (--list)

 > 시그널의 종류 출력

: -w (--wait)

 > 시그널을 받은 프로세스들이 종료될때 까지 터미널에서 대기

: -v (--verbose)

 > 자세한 결과 출력

: -s <signal> (--signal)

 > 보낼 시그널 이름 입력

: -u <user> (--user)

 > 특정 프로세스의 사용자 이름 입력

 

 

 

 

 

jobs

: 백그라운드로 실행되고 있거나 현재 중지되어 있는 프로세스 목록 출력

 

- 형식

: jobs [option]

 

- 주요 옵션

: -l

 > PID를 추가로 출력

 

 

 

 

 

fg

: 백그라운드 프로세스를 포어그라운드 프로세스로 전환

 

- 형식

: fg [job number]

 

 

 

 

 

bg

: 포어그라운드 프로세스를 백그라운드 프로세스로 전환

: 터미널에서 실행중인 프로세스를 ctrl + z로 작업을 일시중지 시킨 후 전환

 

- 형식

: bg

 

 

 

 

 

nice

: 프로세스의 우선순위 변경. NI 값을 변경 (NI값은 -19~20까지 이며 값이 작을수록 우선순위가 높음)

: 기존 설정된 값에 증감하는 형식

 

- 형식

: nice [option] <process name>

 

- 주요옵션

: -n <value>, -<value>, --adjustment=<value>

 > 프로세스에 설정된 NI값에 지정한 값만큼 증감. 값을 지정하지 않으면 10으로 들어감

 > +10 = -10 / -10 = --10

 

 

 

 

 

renice

: 실행중인 프로세스의 우선순위를 수정. 기존의 프로세스를 새로 실행시킴

: 지정한 NI 값으로 설정됨

 

- 형식

: renice [option] <NI value> <PID>

 

- 주요 옵션

: -n (--priority)

 > NI 값 지정. 일반적으로 생략

: -p (--pid)

 > PID 지정. (기본값)

: -u (--user)

 > 사용자 이름 지정

: -g (--pgrep)

 > 프로세스의 그룹 ID 지정

: -v (--version)

 > 명령어의 버전

 

 

 

 

 

nohup

: 프로세스를 실행할 때 백그라운드로 실행

: 프로세스의 표준 출력과 에러는 nohup.out에 저장됨 (해당 파일은 명령어를 실행한 위치에 생성됨)

 > 쓰기 작업이 불가능한 경우 $HOME/nohup.out에 생성

: nohup 명령을 백그라운드로 실행하기 위해서는 명령어 뒤에 &를 명시해야함

 

- 형식

: nohup <command> [&]

 

 

 

 

 

pgrep

: 프로세스 이름 기반으로 PID 값 출력

 

- 형식

: pgrep [option] [pattern]

 

- 주요 옵션

: -u

 > 프로세스를 실행시킨 사용자 이름

: -U

 > 프로세스를 실행시킨 사용자의 UID

: -g

 > 프로세스를 실행시킨 그룹

: -G

 > 프로세스를 실행시킨 그룹의 GID

: -t

 > 프로세스를 실행시킨 터미널

: -l

 > PID 외 프로세스 이름도 함께 출력

 

 

 

 

 

pkill

: 프로세스명을 사용하여 특정 프로세스에 시그널 발송

 

- 형식

: pkill [option] [pattern]

 

- 주요 옵션

: -u

 > 프로세스를 실행시킨 사용자 이름

: -U

 > 프로세스를 실행시킨 사용자의 UID

: -g

 > 프로세스를 실행시킨 그룹

: -G

 > 프로세스를 실행시킨 그룹의 GID

: -t

 > 프로세스를 실행시킨 터미널

 

 

 

 

 

service

: /etc/rc.d/init.d 디렉터리에 존재하는 스크립트를 통해 데몬 프로세스를 제어

 

- 형식

: service <daemon name> [command]

 

-  주요 명령

: start

: stop

: restart

: reload

 > 서비스 재시작 없이 데몬 파일만 다시 읽어들임 

 

 

 

 

 

프로세스 관련 디렉터리

- /etc/rc.d/init.d 

- /etc/rc0.d ~ rc6.d

- /proc

 

 

 

 

 

/etc/rc.d/init.d

: 부팅 시 실행할 데몬 파일을 모아놓은 디렉터리

: 해당 디렉터리에 스크립트 파일을 작성하고 생성하면 부팅 시에 스크립트가 실행되어 데몬을 실행시킬 수 있음

: 해당 디렉터리에 정의된 파일을 통해 실행중인 데몬을 제어할 수 있음

 

- 데몬 제어

: /etc/rc.d/init.d/httpd start

: /etc/rc.d/init.d/httpd stop

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

: /etc/rc.d/init.d/httpd reload

=> service httpd start 등으로 사용가능

 

 

 

 

 

/etc/rc0.d ~ rc6.d

: 리눅스 부팅 시 실행 레벨 (run level)에 따라 실행할 데몬을 나눈 디렉터리

 

- 디렉터리 내 파일명 기본 형식

: [K|S][num][init.d name]

ex) K50httpd

 

- 형식별 의미

: K

 > 실행되지 않을 서비스

: S

 > 실행될 서비스

: num

 > 순차적인 번호. 번호가 클수록 나중에 실행됨

: init.d name

 > /etc/rc.d/init.d 디렉터리에 있는 스크립트명 (데몬 이름)

 

 

 

 

 

/proc

: 일종의 가상 파일 시스템으로, 시스템에 동작중인 프로세스의 상태정보와

  기타 시스템 및 하드웨어 정보가 수록된 디렉터리

: ps 명령어 실행 시 해당 디렉터리 내 파일을 참조

: 새로운 프로세스가 실행되면 /proc 디렉터리 내 PID를 이름으로한 디렉터리가 생성되고

  해당 디렉터리 내부에 프로세스에 대한 정보가 저장됨

 

- 주요 정보 파일 및 디렉터리

: acpi

 > 전원 관련 정보 디렉터리

: bus

 > pci와 같은 bus 정보 디렉터리

: cmdline

 > 부팅 시에 실행되는 커널 관련 옵션 정보

: cpuinfo

 > CPU에 대한 정보

: devices

 > 현재  커널에 설정된 디바이스 드라이버 리스트 정보

: dma

 > 시스템에서 사용중인 DMS 정보

: filesystems

 > 커널에 설정된 파일 시스템의 리스트 정보

: interrupts

 > 시스템에서 사용중인 인터럽트 정보

: iomem

 > 메모리 번지별 할당된 리스트 정보

: ioports

 > 시스템에서 사용중인 입출력 주소

: kcore

 > 물리적 메모리 이미지. 비정상 종료 및 프로그램 디버깅 시 사용 

: loadavg

 > 최근 1분, 5분, 15분 동안의 평균 부하율 기록

: meminfo

 > 물리적 메모리 및 스왑 메모리 정보

: misc

 > 기타 장치에 대한 정보

: mounts

 > 시스템 마운트 정보

: net

 > 네트워크 관련 정보 디렉터리

: partitions

 > 현재 활성화된 파티션 정보

: scsi

 > SCSI 관련 정보 디렉터리

: swaps

 > 스왑 파티션 정보

: sys

 > 커널 관련 정보 디렉터리. sysctl로 명령어로 제어

: sysvipc

 > Sys V IPC 자원 정보 관련 디렉터리 (Message Queues, Semapores, Shared Memory)

: uptime

 > 시스템 가동 시간. uptime 명령어가 참조

: version

 > 커널 버전 정보

: mdstat

 > RAID 사용 시 관련 정보

 

 

 

 

 

/proc/PID

: 프로세스 실행 후 /proc/PID 디렉터리 내에 저장되는 정보

 

- 주요 구성 요소 (파일 및 디렉터리)

: cmdline

 > 명령행 옵션 정보

: cwd

 > 작업 디렉터리

: environ

 > 프로세스 환경 정보

: exe

 > 프로세스를 실행시킨 명령어

: fd

 > 파일 지정자에 대한 정보를 담은 디렉터리

: maps

 > 실행 명령 및 라이브러리 파일의 메모리 맵 정보 

: mounts

 > 시스템 마운트 정보

: root

 > 해당 프로세스의 루트 디렉터리

: stat

 > 해당 프로세스의 상태

: statm

 > 프로세스의 메모리 상태 (size, rss, sha, trs, drs, lrs, dt 등)

: status

 > 사람이 보기 쉬운 형태로 프로세스의 상태 정보를 기록 

 

 

 

 

 

 

Refference

 

리눅스마스터 1급 2차 실기 정복하기 | 정성재 - 교보문고

리눅스마스터 1급 2차 실기 정복하기 | 출제 경향을 반영하여 핵심 내용만 요약 정리 시험대비를 위한 최신 기출문제를 해설과 함께 수록본 교재는 독자들이 최근 출간 요구가 많았던 리눅스마

product.kyobobook.co.kr

 

300x250
728x90