프로세스
: 실행중인 프로그램
: 리눅스에서는 프로세스 마다 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
'Certification > 리눅스마스터' 카테고리의 다른 글
리눅스 소스 파일 및 패키지 설치 (0) | 2022.10.10 |
---|---|
리눅스 프로세스 스케줄링 (0) | 2022.10.10 |
리눅스 파일링크 (소프트 링크 / 심볼릭 링크 / 하드 링크) (0) | 2022.10.10 |
리눅스 Disk Quota 설정 (0) | 2022.10.10 |
리눅스 Disk Swap 설정 (0) | 2022.10.10 |