나의 IT일지
프로세스 본문
프로세스
프로세스란 프로그램이 작동하고 있는 과정으로, 작동하고 있는 프로그램을 프로세서라고 한다. 프로세스가 실행되면 각 프로세스마다 PID가 부여되며, 해당 PID를 통해 관리되는데, 프로세스가 다시 실행되면 가장 뒤에 있는 PID번호를 다시 부여받는다.
- forground 프로세스
- 현재 사용중인 쉘로 동작시키는 프로세스
- 선행 프로세스가 종료된 뒤에 다음 프로세스 실행 → forground 프로세스가 작동중에는 해당 쉘에서 프로세스를 작동 할 수 없음
- TUI 환경에서 주로 사용
- [명령어] : 해당 쉘에 명령어를 forground 프로세스형식으로 실행
- [명령어] > /dev/null : 해당 쉘에 명령어를 실행하며, 실행 결과를 숨김
- background 프로세스
- 현재 사용중인 쉘과 다른 쉘로 동작시키는 프로세스
- 프로세스 중에 쉘 전환하여 다른 프로세스 실행 → background 프로세스가 작동되어도 다른 프로세서는 작동 할 수 있음
- GUI 환경에서 주로 사용
- 서비스(데몬)가 해당 프로세스로 작동
- 해당 forground 프로세스 뒤에 "&" 붙히면 해당 명령어는 background 프로세스로 실행하게 된다.
- [명령어] & : 해당 쉘에 명령어를 background 프로세스형식으로 실행
- [명령어] & > /dev/null : 해당 쉘에 명령어를 실행하며, 실행 결과를 숨김
fork 프로세스와 exec 프로세스 | |
fork 프로세스 | 부모 프로세스가 종료되면 자식 프로세스도 종료되는 프로세스 |
exec 프로세스 | 부모 프로세스가 종료가 되어도 조상 프로세스가 해당 자식 프로세스를 받는 프로세스 |
프로세스 실행, 전환
일반적으로 명령어를 실행하면 해당 쉘에서 작동하는 forground 프로세스로 동작한다.
- jobs : 작동중인 프로세스의 순위 확인 (+ : 가장 마지막에 실행시킨 작업, - : 2순위로 마지막에 실행시킨 작업)
- ctrl + z : 가장 마지막에 실행시킨 프로세스 동작 정지
- ctrl + c : 가장 마지막에 실행시킨 프로세스 동작 취소
- ctrl + d : 가장 마지막에 실행시킨 프로세스 동작종료
- kill [PID] : 프로세스를 종료하는 명령어
- killall [프로세스명] : 해당 이름을 가지는 모든 프로세스 종료
- kill %[순위] : 해당 순위에 있는 프로세스 종료
kill 시그널 | 기능 |
1 | HUP로그아웃 (hup : 로그아웃(터미널 종료)을 하면 프로그램 자동 종료<=> nohup : 로그아웃(터미널 종료)을 해도 프로그램 실행 중) |
2 | 동작 취소 (ctrl + c) |
9 | 강제 종료 |
15 | 정상 종료 |
19 | 프로그램 정지 |
20 | 키보드 동작 정지 (ctrl + z) |
- fg : 가장 마지막에 실행시킨 background 프로세스를 foreground 프로세스로 전환
- fg %[순위] : 해당 순위의 프로세스를 foreground 프로세스로 전환
- bg : 가장 마지막에 실행시킨 foreground 프로세스를 background 프로세스로 전환 → bg를 전환할 때는 foreground 프로세스가 동작 정지된 상태이여야 한다.
- bg %[순위] : 해당 순위의 프로세스를 background 프로세스로 전환
스케줄링
스케줄링이란 예약 프로세스 생성하는 것으로, 특정시간에 스크랩스를 실행하는 기능이다.
- at [시]:[분] : 해당 시간에 한번만 실행시키는 명령어
- 확인 명령어 : atq, at -c [실행 넘버]
- 취소 : atrm [실행 넘버]
- batch : cpu 부하율에 따라 명령을 수행하도록 작업하는 명령어
- atrun [ CPU 부하율] : batch 명령어를 수행할 CPU부하율 설정하는 명령어
- 확인 명령어 : atq, at -c [실행 넘버]
- 취소 : atrm [실행 넘버]
- cron : 해당 시간에 주기적으로 스크립트를 실행시키는 서비스
- /usr/lib/systemd/system/crond.service : cron 데몬 설정 파일
- /usr/sbin/crond : cron 데몬
- service restart crond : cron 서비스 실행 명령
- /etc/crontab : 해당 명령어를 계정 권한으로 주기적으로 실행 시키도록 설정하는 파일
- [MM] [HH] [DD] [mm] [d] [user] [command] → 해당 명령어를 계정 권한으로 실행
- MM : 분 (0~59) (* : 전부, - : 범위 , / : 간격)
- HH : 시 (0~23) (* : 전부, - : 범위 , / : 간격)
- DD : 일 (1~31) (* : 전부, - : 범위 , / : 간격)
- mm : 월 (1~12) (* : 전부, - : 범위 , / : 간격)
- d : 요일 (0~6 (일요일~토요일) / 1~7 (월요일~일요일)) (* : 전부, - : 범위 , / : 간격)
- user : 실행할 계정
- command : 실행할 명령어
- [MM] [HH] [DD] [mm] [d] [user] run-parts [directory] → 해당 디렉토리에 있는 모든 스크랩트를 계정 권한으로 실행
- MM : 분 (0~59) (* : 전부, - : 범위 , / : 간격)
- HH : 시 (0~23) (* : 전부, - : 범위 , / : 간격)
- DD : 일 (1~31) (* : 전부, - : 범위 , / : 간격)
- mm : 월 (1~12) (* : 전부, - : 범위 , / : 간격)
- d : 요일 (0~6 (일요일~토요일) / 1~7 (월요일~일요일)) (* : 전부, - : 범위 , / : 간격)
- user : 실행할 계정
- run-parts : 여러개의 스크립트를 한번에 작동
- directory : 한번에 작동시킬 스크랩트들이 있는 디렉토리
- [MM] [HH] [DD] [mm] [d] [user] [command] → 해당 명령어를 계정 권한으로 실행
- /etc/cron.d : 주기적으로 스크립트를 실행하도록 설정하는 파일을 모아둔 디렉토리
- /etc/cron.daily : 매일 실행해야 하는 스크랩트를 모아둔 디렉토리
- /etc/cron.hourly : 매 시간마다 실행해야 하는 스크랩트를 모아둔 디렉토리
- /etc/cron.monthly : 매 달마다 실행해야 하는 스크랩트를 모아둔 디렉토리
- /etc/cron.weekly : 매 주마다 실행해야 하는 스크랩트를 모아둔 디렉토리
crontab |
로그인 한 계정에서 해당 명령어를 주기적으로 실행 시키도록 설정하는 명령어 |
|
프로세스 확인
- top : 현재 실행중인 프로세스 확인하는 명령어
- [PID USER] [PR] [NI] [VIRT] [RES] [SHR] [S] [%CPU] [%MEM] [TIME+] [COMMAND]
- PID : 프로그램 ID
- USER : 동작 시키는 계정
- PR : 우선순위 (기본값 20)
- NI : nice 값 (범위 : -20 ~ +19)
- VIRT: 가상메모리
- RES : 실제메모리
- SHR : 공유메모리
- S : 프로세스 상태
- R : 실행 중
- S : 일시정지 (대기 중)
- T : 중지
- Z : 좀비 프로세스 (종료되었으나 부모 프로세스에 의해 수습되지 않는 프로세스)
- %CPU : CPU점유율
- %MEM : 메모리점유율
- TIME : 동작시간
- command : 동작중인 프로세스
- [PID USER] [PR] [NI] [VIRT] [RES] [SHR] [S] [%CPU] [%MEM] [TIME+] [COMMAND]
키 | 설명 | 키 | 설 |
h | 도움말 | m | 메모리 저장 출력 |
l | 평균부하 | k | 강제 종료 |
r | 프로세스 우선순위 | q | 종료 |
u | 지정유저정보 |
- PS : 해당 계정에서 사용하는 프로세스의 상태를 확인하는 명령어
- ps -ef
- UID : 프로세스 실행 계정
- PID : 프로그램 실행 ID
- PPID : 부모 프로세스 ID (PPID를 실행시킨 프로세스 ID)
- C : CPU 사용량
- STIME : 프로세스 시작 시간
- TTY : 터미널 종류
- tty : 로컬 터미널(TUI환경을 통해 실행)
- pts : 원격 터미널(GUI환경을 통해 실행)
- TIME : 프로세스 실행 시간
- CMD : 프로세스 실행 명령어
- ps -axu
- USER : 프로세스 실행 계정
- PID : 프로세스 ID
- %CPU : CPU 점유율
- %MEM : 메모리점유율
- VSZ : 가상메모리 사용량
- RSS : 실제 메모리 사용량
- TTY : 터미널 종류
- tty : 로컬 터미널(TUI환경을 통해 실행)
- pts : 원격 터미널(GUI환경을 통해 실행)
- STAT : 프로세스 상태
- 첫번째 칸
- R : 실행 중
- S : 일시정지 (대기 중)
- T : 중지
- Z : 좀비 프로세스 (종료되었으나 부모 프로세스에 의해 수습되지 않는 프로세스)
- 두번째 칸 이후
- < 우선순위 높은
- N 우선순위 낮은
- s : 세션 프로세스
- | : 멀티스레드
- + : 포어그라운드로 동작하는 프로세스
- 첫번째 칸
- START
- TIME : 동작시간
- command : 동작중인 프로세스
- ps -al
- F : 프로세스의 플러그
- S : 프로세스 상태
- 첫번째 칸
- R : 실행 중
- S : 일시정지 (대기 중)
- T : 중지
- Z : 좀비 프로세스 (종료되었으나 부모 프로세스에 의해 수습되지 않는 프로세스)
- 두번째 칸 이후
- < 우선순위 높은
- N 우선순위 낮은
- s : 세션 프로세스
- | : 멀티스레드
- + : 포어그라운드로 동작하는 프로세스
- 첫번째 칸
- PID : 프로그램 실행 ID
- PPID : 부모 프로세스 ID (PPID를 실행시킨 프로세스 ID)
- C : CPU 사용량
- PRI : 우선 순위 (기본값 : 80)
- NI : nice 값
- ADDR : 프로세스가 사용하는 메모리 주소
- WCHAN : 프로세스가 기다리는 이벤트
- TTY : 터미널 종류
- tty : 로컬 터미널(TUI환경을 통해 실행)
- pts : 원격 터미널(GUI환경을 통해 실행)
- TIME : 프로세스 실행 시간
- CMD : 프로세스 실행 명령어
- ps -ef
옵션 | 기능 |
-a | 다른 계정에서 사용하는 프로세스 상태 출력 (쉘 프로세스 제외) |
-e | 모든 계정에서 사용하는 프로세스 상태 출력 |
-u | 해당 프로세스를 사용하는 계정 추가 출력 |
-l | 프로세스 상태 긴 형식으로 확인 (F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD) |
-f | 프로세스 상태 전체 형식으로 확인 (UID PID PPID C STIME TTY TIME CMD) |
-x | 터미널이 없이 실행중인 프로세스 출력 |
- pstree : 최상위 프로세스인 systemd 프로세스를 기준으로 프로세스 조직도 출력
옵션 | 기능 |
-p | PID 번호출력 |
-n | PID 순서정렬 |
프로세스의 우선순위 | |
Priority값 | 운영체제에서 참고하는 우선순위으로 시스템 상황에 따라 알아서 부여한 값이기에 사용자가 직접 조작할 수 없다. |
NIce값 | 사용자가 직접 조작할 수 있는 값으로, 기본값을 0으로 지정하며, 값이 낮을수록 우선순위가 높다.
|
최상위 프로세스 : systemd
모든 프로세스는 실행하기 위해서 부모 프로세스가 필요하다. 예를 들면, 어느 한 명령어를 실행하기 위해서는 쉘에서 실행시켜야 한다. 즉, 해당 명령어의 부모 프로세스는 쉘이 된다. 이처럼 모든 프로세스는 부모 프로세스가 존재하며, 부모 프로세스에서 해당 프로세스가 작동이 된다.
CentOs 6 이전버전에서는 init를 최상위 프로세스(모든 프로세스의 부모 프로세스)로 설정되어 있으며, UUID의 값을 1로 고정되어 있다. 그래서 init의 runlevel을 통해 모드를 변경할 수 있다.
런레벨 | 기능 | 특징 |
init 0 | 종료 | 시스템 종료 (shutdown -h now , halt, power off) |
init 1 | 싱글 모드 | 시스템 복구 (shutdown -r now, reboot) |
init 2 | 멀티 모드 | NFS(network filesystem)미구동 TUI |
init 3 | 멀티 모드 | NFS(network filesystem)구동 TUI |
init 4 | x | x |
init 5 | 멀티 모드 | NFS(network filesystem)구동 GUI(X11) |
init 6 | 재시작 | 시스템 재시작 |
하지만 CentOs 7이후버전에서는 기존의 init 프로세스를 확장한 systemd를 최상위 프로세스로 사용하고 있다. 그래서 init의 runlevel 형태 뿐만 아니라 target 형태로 부팅방식을 TUI, GUI으로 변경할 수 있다.
- /etc/inittab : systemd 사용전에 init형태를 변경하는 파일이지만 현재는 target형태의 메뉴얼로 사용
- systemctl get-default : 시스템 시작할 때 사용하는 타겟 확인 (multi-user.target = TUI, graphical.target = GUI)
- systemctl set-default [타겟] : 시스템 시작할 때 사용하는 타겟 변경 (multi-user.target = TUI, graphical.target = GUI)
'정보보안' 카테고리의 다른 글
NCS)물리 보안 운영 (0) | 2023.06.27 |
---|---|
압축과 패키지 (0) | 2023.06.26 |
디스크와 파일 시스템 (0) | 2023.06.22 |
NCS)관리적 보안 구축 (0) | 2023.06.21 |
링크와 쉘 (0) | 2023.06.20 |
Comments