IT STUDY LOG

[리눅스 운영체제] 06. 프로세스 관리 본문

devops bootcamp 4/서비스 운영 기초

[리눅스 운영체제] 06. 프로세스 관리

roheerumi 2023. 3. 13. 11:12

# 학습 목표

  • 프로세스 관리
    • 시스템 관리자가 하는 일을 이해할 수 있다.
    • 사용자 및 루트 권한에 대해 이해하고, 사용자 및 그룹 관리를 할 수있다.
    • 파일의 권한을 변경하고 관리할 수 있다.
    • 프로그램과 프로세스의 차이를 이해하고, 프로세스를 확인/종료할 수 있다.
    • 백그라운드 프로세스와 서비스를 이해하고, 관리할 수 있다.
    • cron 및 bash 스크립트를 이용해서 자동화를 할 수 있다.

 


# 학습 내용

1.  프로그램과 프로세스

  • 프로그램과 프로세스
    프로그램 프로세스
    - 특정 목적을 수행하기 위한 명령어와 데이터의 집합
    - 정적인 상태의 파일
    - 보조기억장치에 존재
    - 컴퓨터에서 실행되고 있는 프로그램
    - 프로그램이 실행되면 운영체제로부터 실행에 필요한 메모리를 할당받음
    - 프로그램을 여러 번 구동 하면 프로세스가 메모리 상에서 실행
    - 능동적인 개체
    - 메모리에 존재
  • 스레드
    • 개념 
      • 경량 프로세스
      • 프로세스 내의 작업 단위
      • 자신만의 스택, 레지스터, Program Counter 정보를 가지나 기타 메모리 영역(heap, data, code)은 공유함
        싱글 스레드 멀티 스레드
        - 1 프로세스, 1 스레드 - 1 프로세스, 2개 이상의 스레드
        - 멀티 태스킹(=멀티 프로그래밍): 애플리케이션 단위, 두 가지 이상의 작업을 동시 처리하는 것

        - 멀티 스레드: 애플리케이션 내부에서의 멀티 태스킹
        - 목적: 대용량 데이터 처리시간 줄이기 위해 데이터 분할 병렬 처리 / 여러 클라이언트 요청 처리 서버 개발

 

2.  프로세스 관리 - ps, pstree

  • 프로세스 동작(실행) 방식
    포그라운드 백그라운드
    - 터미널 제어권을 가지고 동작하는 모드
    - 입력, 대기 후 출력 이후 다시 입력하는 방식
    - 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야하는 방식
    - 한 번에 하나의 명령 실행 -> 여러 프로세스 동시 실행 어려움
    - 한 터미널에서 여러 개의 프로세스를 동시 실행할 수 있는 방식
    - 명령 실행 작업이 오래 걸리거나, 수행 후 다른 작업을 해야할 경우 사용
    - 명령어 뒤에 &을 붙여 상숑
    - 터미널 세션이 종료되면 백그라운드 프로세스도 종료
     > nohup 명령어를 이용할 경우 터미널 세션 종료되어도 작업 종료까지 실행 
  • 사용 예시
# 포그라운드 방식
roheerumi@devops:~$ command
roheerumi@devops:~$ ping google.com

# 백그라운드 방식 
roheerumi@devops:~$ command&
roheerumi@devops:~$ ping google.com&

# nohup 커맨드 (no hang up)
roheerumi@devops:~$ nohup command&
roheerumi@devops:~$ nohup ping google.com&
  • ps
    • 현재 실행 중인 프로세스의 목록을 확인
    • 결과
      • PID : 프로세스 번호
      • TTY : 프로세스가 실행된 터미널의 종류와 번호
      • TIME : 프로세스 실행 시간
      • CMD : 실행되고 있는 프로그램의 이름(명령)
    • 옵션  
      -e 시스템에서 실행 중인 모든 프로세스의 정보를 출력
      -f 프로세스의 자세한 정보를 출력
      • UID : 프로세스를 실행한 사용자 ID
      • PPID : 부모 프로세스 번호
      • C : CPU 사용량(%)
      • STIME : 프로세스의 시작 날짜나 시간
      • TTY : 프로세스가 실행된 터미널의 종류와 번호
      • STAT : 프로세스 상태
      -u uid uid로 특정한 사용자에 대한 모든 프로세스의 정보를 출력
      -p pid pid로 지정한 특정 프로세스의 정보를 출력
    • 사용 예시
# ps 명령어 사용시
roheerumi@devops:~$ ps
PID TTY          TIME CMD
   1853 pts/1    00:00:00 bash
   1859 pts/1    00:00:00 ps
   
# ps -ef 명령어 사용시
roheerumi@devops:~$ ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
# [상략]
root        1690       2  0 11:02 ?        00:00:00 [kworker/1:3-events]
roheeru+    1764     808  0 11:03 ?        00:00:00 /usr/lib/bluetooth/obexd
root        1806       2  0 11:04 ?        00:00:00 [kworker/u6:0-events_unbound
roheeru+    1818     808  0 11:07 ?        00:00:00 ping google.com
roheeru+    1843     808  1 11:07 ?        00:00:00 /usr/libexec/gnome-terminal-
roheeru+    1853    1843  0 11:07 pts/1    00:00:00 bash
root        1867       1  0 11:08 ?        00:00:00 /bin/sh /etc/cron.weekly/upd
root        1869    1867  0 11:08 ?        00:00:00 sleep 1802
roheeru+    1873    1853  0 11:09 pts/1    00:00:00 ps -ef
  • pstree
    • 트리구조로 도식화하여 프로세스를 확인할 수 있고 부모 관계를 한 눈에 파악
      • 사용 예시
roheerumi@devops:~$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─3*[VBoxClient───VBoxClient───2*[{VBoxClient}]]
        ├─VBoxClient───VBoxClient───3*[{VBoxClient}]
        ├─VBoxService───8*[{VBoxService}]
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─acpid
        ├─anacron
        ├─avahi-daemon───avahi-daemon
        ├─colord───2*[{colord}]
        ├─cron
        ├─cups-browsed───2*[{cups-browsed}]
        ├─cupsd───dbus
        ├─dbus-daemon
        ├─gdm3─┬─gdm-session-wor─┬─gdm-x-session─┬─Xorg───{Xorg}
        │      │                 │               ├─gnome-session-b─┬─ssh-agent
        │      │                 │               │                 └─2*[{gnome-+
        │      │                 │               └─2*[{gdm-x-session}]
        │      │                 └─2*[{gdm-session-wor}]
        │      └─2*[{gdm3}]
        ├─geoclue───2*[{geoclue}]
        ├─gnome-keyring-d───3*[{gnome-keyring-d}]
        ├─irqbalance───{irqbalance}
        ├─2*[kerneloops]
        ├─networkd-dispat
        ├─polkitd───2*[{polkitd}]
        ├─rsyslogd───3*[{rsyslogd}]
        ├─rtkit-daemon───2*[{rtkit-daemon}]
        ├─snapd───11*[{snapd}]
        ├─switcheroo-cont───2*[{switcheroo-cont}]
        ├─systemd─┬─(sd-pam)
        │         ├─at-spi-bus-laun─┬─dbus-daemon
        │         │                 └─3*[{at-spi-bus-laun}]
        │         ├─at-spi2-registr───2*[{at-spi2-registr}]
        │         ├─dbus-daemon
        │         ├─dconf-service───2*[{dconf-service}]
        │         ├─evolution-addre───5*[{evolution-addre}]
        │         ├─evolution-calen───8*[{evolution-calen}]
        │         ├─evolution-sourc───3*[{evolution-sourc}]
        │         ├─gjs───5*[{gjs}]
        │         ├─gnome-session-b─┬─evolution-alarm───5*[{evolution-alarm}]
        │         │                 ├─gsd-disk-utilit───2*[{gsd-disk-utilit}]
        │         │                 ├─update-notifier───3*[{update-notifier}]
        │         │                 └─3*[{gnome-session-b}]
        │         ├─gnome-session-c───{gnome-session-c}
        │         ├─gnome-shell─┬─ibus-daemon─┬─ibus-engine-han───3*[{ibus-engi+
        │         │             │             ├─ibus-engine-sim───2*[{ibus-engi+
        │         │             │             ├─ibus-extension-───3*[{ibus-exte+
        │         │             │             ├─ibus-memconf───2*[{ibus-memconf+
        │         │             │             └─2*[{ibus-daemon}]
        │         │             └─14*[{gnome-shell}]
        │         ├─gnome-shell-cal───5*[{gnome-shell-cal}]
        │         ├─gnome-terminal-─┬─bash───pstree
        │         │                 └─4*[{gnome-terminal-}]
        │         ├─goa-daemon───3*[{goa-daemon}]
        │         ├─goa-identity-se───2*[{goa-identity-se}]
        │         ├─gsd-a11y-settin───3*[{gsd-a11y-settin}]
        │         ├─gsd-color───3*[{gsd-color}]
        │         ├─gsd-datetime───3*[{gsd-datetime}]
        │         ├─gsd-housekeepin───3*[{gsd-housekeepin}]
        │         ├─gsd-keyboard───3*[{gsd-keyboard}]
        │         ├─gsd-media-keys───3*[{gsd-media-keys}]
        │         ├─gsd-power───3*[{gsd-power}]
        │         ├─gsd-print-notif───2*[{gsd-print-notif}]
        │         ├─gsd-printer───2*[{gsd-printer}]
        │         ├─gsd-rfkill───2*[{gsd-rfkill}]
        │         ├─gsd-screensaver───2*[{gsd-screensaver}]
        │         ├─gsd-sharing───3*[{gsd-sharing}]
        │         ├─gsd-smartcard───4*[{gsd-smartcard}]
        │         ├─gsd-sound───3*[{gsd-sound}]
        │         ├─gsd-usb-protect───3*[{gsd-usb-protect}]
        │         ├─gsd-wacom───2*[{gsd-wacom}]
        │         ├─gsd-wwan───3*[{gsd-wwan}]
        │         ├─gsd-xsettings───3*[{gsd-xsettings}]
        │         ├─gvfs-afc-volume───3*[{gvfs-afc-volume}]
        │         ├─gvfs-goa-volume───2*[{gvfs-goa-volume}]
        │         ├─gvfs-gphoto2-vo───2*[{gvfs-gphoto2-vo}]
        │         ├─gvfs-mtp-volume───2*[{gvfs-mtp-volume}]
        │         ├─gvfs-udisks2-vo───3*[{gvfs-udisks2-vo}]
        │         ├─gvfsd─┬─gvfsd-trash───2*[{gvfsd-trash}]
        │         │       └─2*[{gvfsd}]
        │         ├─gvfsd-fuse───5*[{gvfsd-fuse}]
        │         ├─gvfsd-metadata───2*[{gvfsd-metadata}]
        │         ├─ibus-portal───2*[{ibus-portal}]
        │         ├─ibus-x11───2*[{ibus-x11}]
        │         ├─obexd
        │         ├─ping
        │         ├─pulseaudio───3*[{pulseaudio}]
        │         ├─tracker-miner-f───4*[{tracker-miner-f}]
        │         └─xdg-permission-───2*[{xdg-permission-}]
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-resolve
        ├─systemd-timesyn───{systemd-timesyn}
        ├─systemd-udevd
        ├─udisksd───4*[{udisksd}]
        ├─unattended-upgr───{unattended-upgr}
        ├─update-notifier───sleep
        ├─upowerd───2*[{upowerd}]
        ├─whoopsie───2*[{whoopsie}]
        └─wpa_supplicant

 

3. 프로세스 관리 - kill

  • 시그널
    • 프로세스에 이벤트 발생을 전달하기 위해 사용하는 것
  • kill
    • 프로세스 작업 중지, 실행 종료, 대기, 재시작, 강제 종료 등의 시그널을 전달하는 명령어
      사용 예시
      kill -시그널번호(시그널명) %작업번호
      kill -시그널번호(시그널명) PID
    • 시그널의 대표적인 종류(kill -l 명령어를 통해 확인 가능)
      종류 의미
      SIGHUP 재시작 시
      SIGINT 실행 중지 시그날, crtl + c
      SIGKILL 프로세스 강제 종료
      SIGTERM 프로세스 정상 종료(기본 명령)
      SIGCONT 정지된 프로세스 실행
      SIGSTOP 터미널에서 입력되는 정지 시그널
      SIGTSTP 실행 정지 후 재실행 대기, crtl + z
    • 사용 예시
roheerumi@devops:~$ kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

 

4. 프로세스 관리 - jobs

  • jobs
    • 백그라운드에서 수행중인 프로세스 및 프로세스의 상태를 확인하는 명령어
    • [1], [2], [3] ... [n] : 작업 번호
    • + : 현재 처리되고 있는 프로세스를 의미
    • - : 다음에 작업할 프로세스를 의미
  • 프로세스의 상태
    • Running : 실행 중
    • Stopped : 일시 중단(Ctrl + Z 입력)
    • Terminated : 강제 종료(kill 명령 종료)
    • Done : 정상 종료
Comments