Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

프로세스 본문

정보보안

프로세스

세레프 2023. 6. 23. 23:23

프로세스

 

네트워크와 프로세스

네트워크 서버는 고정 IP를 사용해야 한다. 왜냐하면, 유동 IP를 사용하게 되면, 외부에서의 서버 진입을 할 수 없게 된다. 따라서 서버를 운영하는 운영체제(Linux server, windows server)는 고정 IP를 사

my-it-diary.tistory.com

 프로세스프로그램이 작동하고 있는 과정으로, 작동하고 있는 프로그램을 프로세서라고 한다. 프로세스가 실행되면 각 프로세스마다 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 시그널 기능
 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 : 한번에 작동시킬 스크랩트들이 있는 디렉토리
    • /etc/cron.d : 주기적으로 스크립트를 실행하도록 설정하는 파일을 모아둔 디렉토리
      • /etc/cron.daily : 매일 실행해야 하는 스크랩트를 모아둔 디렉토리
      • /etc/cron.hourly : 매 시간마다 실행해야 하는 스크랩트를 모아둔 디렉토리
      • /etc/cron.monthly : 매 달마다 실행해야 하는 스크랩트를 모아둔 디렉토리
      • /etc/cron.weekly : 매 주마다 실행해야 하는 스크랩트를 모아둔 디렉토리
crontab
로그인 한 계정에서 해당 명령어를 주기적으로 실행 시키도록 설정하는 명령어
  • crontab -e : 로그인한 계정에서 조건에 따라 명령어를 실행 예약
    • [MM] [HH] [DD] [mm] [d] [command] 
      • MM : 분 (0~59) (* : 전부, - : 범위 , / : 간격)
      • HH : 시 (0~23) (* : 전부, - : 범위 , / : 간격)
      • DD : 일 (1~31) (* : 전부, - : 범위 , / : 간격)
      • mm : 월 (1~12) (* : 전부, - : 범위 , / : 간격)
      • d : 요일 (0~6 (일요일~토요일) / 1~7 (월요일~일요일))     
      • command : 실행할 명령어
  • crontab -l : 예약된 프로세스 작업 확인
  • crontab -r : 예약된 프로세스 작업 삭제

 

프로세스 확인

  • 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 : 동작중인 프로세스
설명
h 도움말 m 메모리 저장 출력
l 평균부하 강제 종료
프로세스 우선순위 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 : 프로세스 실행 명령어
옵션 기능
-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으로 지정하며, 값이 낮을수록 우선순위가 높다. 
  • nice [-숫자/--숫자] [프로세스명] : 구동할 프로세스 의 nice값 변경 
  • renice [-숫자/+숫자] [pid] : 동작중인 프로세스의 nice값 변경

 


최상위 프로세스 : 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