본문 바로가기
리눅스 공부

DevOps Day 5 (3/13) – 리눅스 운영체제_프로세스 관리

by Jackykim 2023. 3. 14.

Chapter : 프로세스, 스레드, 멀티 스레드
프로그램은 일반적으로 사용자가 원하는 일을 처리 할 수 있도록 프로그래밍 언어를 사용하여 수행절차를 표현해 놓은 명령어들의 집합니다. 컴퓨터에서 실행되고 있는 프로그램을 우리는 프로세스라고 부릅니다.

 

스레드 (Thread)
한 가지 작업을 실행하기 위해 순차적으로 실행한 코드임. . 하나의 스레드는 코드 하나의 흐름이기 때문에, 한 프로세스 내에 스레드가 2개면 코드가 실행되는 흐림이 2개 생긴다는 의미.

 

멀티 스레드 (Multi-Thread)
하나의 프로세스가 두 가지 이사의 작업을 처리 하는게 멀티 스레드 입니다. (애플리케이션 내부에서의 멀티 태스킹). 대용량 데이터의 처리시간을 줄이기 위해 데이터를 분할하여 병렬로 처리하는 데에 사용할 수도 있고, UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용할 수도 있습니다.

프로세스 관리 – ps, pstree
프로세스 방식 : 리눅스의 프로세스는 포그라운드(foreground)와 백그라운드(background)방식으로 동작합니다.

 

포그라운드 (foreground)
터미날에서 작업할 때, 사용자가 명령을 입력하면 이를 해석하여 실행하고 결과를 화면에 출력하여 사용자가 확인 후 다른 명령어를 대화식으로 수행합니다. 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 방식을 포그라운드 방식이라고 합니다.

 

백드라운드 (Background)
백그라운드 방식을 사용하면 프로세스가 실행되는 동안 뒤에서 다른 프로세스가 실행될 수 있으므로 한 터미널에서 여러 개의 프로세스를 동시에 실행할 수 있습니다. 백그라운드 작업은 명령의 실행 시간이 많이 걸릴 것으로 예상되거나, 명령을 실행한 후 다른 작업을 해야할 경우 사용합니다.
백그라운드 방식은 명령어 뒤에 & 붙여서 실행하고, 다른 명령어를 추가적으로 입력할 있습니다. (터미널 종료시 프로새스도 종료됩니다)
작업시간이 오래 걸리는 작업인 경우 nohup 명령어를 이용하여 백그라운드로 실행하면 사용자의 터미널 세션이 종료되어도 작업이 종료될 때까지 프로세스를 실행합니다.

프로세스 목록 확인
ps 명령 : 현재 실행 중인 프로세스의 목록을 확인할 있습니다.
ps
명령의 결과로 PID, TTY, TIME, CMD 출력됩니다.
PID : 프로세스 번호

TTY : 프로세스가 실행된 터미널의 종류와 번호

TIME : 프로세스 실행 시간

CMD : 실행되고 있는 프로그램의 이름(명령)

 

UNIX 방식
ps -e : 시스템에서 실행 중인 모든 프로세스의 정보를 출력한다.
ps -f : 프로세스의 자세한 정보를 출력합니다.
ps -u uid : uid로 특정한 사용자에 대한 모든 프로세스의 정보를 출력한다.
ps -p pid : pid로 지정한 특정 프로세스의 정보를 출력한다.

BSD 방식
ps a : 터미널에서 실행한 프로세스의 정보를 출력한다.
ps u : 프로세스 소유자의 이름, CPU 사용량, 메모리 사용량 등 상세 정보를 출력한다.
ps x : 시스템에서 실행 중인 모든 프로세스의 정보를 출력한다.

ps -f의 출력 정보

UID : 프로세스를 실행한 사용자 ID
PPID :
부모 프로세스 번호
C : CPU
사용량(%)
STIME :
프로세스의 시작 날짜나 시간
TTY :
프로세스가 실행된 터미널의 종류와 번호
STAT : 프로세스 상태

 

ps a, u, x의 출력 정보

USER : 사용자 계정 이름
%CPU : CPU
사용량(%)
%MEM :
물리적 메모리 사용량(%)
RSS :
사용하고 있는 물리적 메모리의 크기(kb)
VSZ :
사용하고 있는 가상 메모리의 크기(kb)
START :
프로세스 시작 시간

 

Pstree
컴퓨터의 전체 프로세스를 구조화하여 확인하고 싶을 때는 pstree 명령을 사용합니다

프로세스 관리 – Kill
터미널에서 프로그램이 실행되고 있을 때, Ctrl + c 을 통해 프로세스를 종료할 수 있습니다. 종료라는 이벤트를 프로세스에 알려주기 위해서 사용하는 것을 시그널(Signal)이라고 합니다.

SIGHUP : 재시작할 때 사용

SIGINT : 실행 중지 시그널, Ctrl + c

SIGKILL : 프로세스 강제 종료

SIGTERM : 프로세스 정상종료 (기본 명령)

SIGCONT : 정지된 프로세스 실행

SIGSTOP : 터미널에서 입력되는 정지 시그널

SIGTSTP : 실행 정지 후 재실행 대기, Ctrl+ z

 

 

프로세스 관리 – jobs
백그라운드에서 수행 중인 프로세스는 jobs 명령으로 확인할 수 있습니다.

프로세스의 상태
Running : 실행 중
Stopped :
일시 중단(Ctrl + Z 입력)
Terminated :
강제 종료(kill 명령 종료)
Done :
정상 종료

 

Chapter : 서비스 관리
데몬과 서비스
데몬은, 리눅스 환경에서 시스템이 초기화가 끝난 후, init 이라는 특별한 프로그램에 의해 자발적으로 백그라운드에서 실행하는 프로그램을 의미합니다. 데몬은 보통 syslogd, httpd 처럼 프로그램 이름 끝에 d 가 붙습니다. 주로 사용되는 일 :

하드웨어 장치 관리
보조 기억장치와 디렉토리의 연결(마운트)
네트워크를 통한 프로세스간 통신(소켓)
애플리케이션 수준의 서비스 제공

 

대표적인 데몬의 예 : 웹 서버 (httpd)
사용자가 어떤 웹 페이지에 접근하고 원하는 결과를 얻으려면, 웹 페이지를 제공하는 프로세스가 상시 실행중이어야 할 것입니다. 이러한 프로그램을웹 서버라고 하며, 일반적으로 백그라운드에서 작동되므로, 이를 데몬이라고 부를 수 있습니다.

busybox 각종 유틸리티를 담은 일종의스위스 군용 같은 리눅스용 애플리케이션으로, 아주 단순한 기능을 가진 서버(httpd) 포함하고 있습니다.

대표적인 데몬 : cron
cron
데몬은 스케쥴에 따라 명령을 실행하는 도구입니다. cron은 해당 작업을 백그라운드에서 실행하며(, 데몬입니다), 따라서 사람의 개입 없이 자동적으로 주기에 따라 명령을 실행할 수 있습니다.

crontab 초기화 : $ crontab -r / crontab -l
https://crontab.guru/#020__* 예시 확인 가능

 

서비스 관리 (systemctl)
모든 데몬의 목록은 systemctl 명령으로 확인할 수 있습니다. 보통 시스템 관리자들은 서비스에 집중하므로, 서비스 목록만 보려면 systemctl --type=service 사용하면 됩니다.

시스템 관리자는 주로
서비스의 상태를 파악하고
제대로 작동중인지,
멈춰있다면 왜 멈춰있는지를 파악하고
재시작하는 일으 할 수 있어야 합니다.

 

Chapter 자동화
bash 스크립트
(shell)이란 : (Shell)은 운영체제의 기능이나 서비스를 구현할 수 있는 명령어를 사용자에게 받아서 실행할 수 있는 인터페이스를 제공합니다. 본 쉘 (Bourne Shell) , C , bash 쉘 등 다양한 종류가 존재하지만 리눅스에서 bash 쉘을 표준으로 사용하고 있음.

학습 :
#! /bin/sh :
파일이 /bin/sh으로 실행 명령어
# This is a comment! : # comment
명령어로 쉘이 내용을 무시함
echo Hello World # this is a comment, too! = Hello World
vim “
파일명.sh” 명령어 기입후 chmod 755 활성화 후 ./testing 가능

 

변수 – Variables
변수 VAR 사용할때 “=” 공백이 있으면 안됩니다. VAR=value, VAR = value는 안됨

변수로 파일 생성 방법


반복문 (Loops)

Looping 위한 “I” 먼저 지정 후 명령어 입력

While Loops

Script 포함 loops

Mkdir rc{0,1,2,3,4,5,6,S}.d = 한번에 많은 파일 / 폴더 생성

 

조건문 (Test)
Test는 평균적으로 [. 로 표시 되어 있고 [ test 연결하는 명령어임

Elif 사용 예시