프로세스 관리
프로그램과 프로세스
- 프로그램: 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 수행절차를 표현해 놓은 명령어들의 집합
- 프로세스: 컴퓨터에서 실행되고 있는 프로그램. 사용자가 프로그램을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당 받아 프로그램의 코드를 실행한다. 하나의 프로그램은 여러 개의 프로세스(다중 프로세스)를 만들 수 있다.
스레드(Thread)
- 스레드: 코드가 실행되는 하나의 흐름. 한 프로세스 내에 스레드가 두 개라면 코드가 실행되는 흐름이 두 개 생긴다는 의미
- 스레드는 한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어 놓은 것
멀티 스레드(Multi-Thread)
- 멀티 스레드: 애플리케이션 내부에서의 멀티 태스킹
- 하나의 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 애플리케이션
- 다양한 곳에서 사용됨
- 대용량 데이터의 처리시간을 줄이기 위해 데이터를 분할하여 병렬로 처리하는 데에 사용
- UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용
- 여러 클라이언트의 요청을 처리하는 서버를 개발할 때에도 사용
프로세스 실행 방식
포그라운드(foreground)
- 사용자가 명령을 입력하고 결과를 화면에 출력하는 방식
- 한 번에 하나의 명령어만 실행 가능
- 포그라운드 프로세스
백그라운드(background)
- 프로세스가 실행되는 동안 다른 프로세스가 실행 가능한 방식
- 여러 개의 프로세스를 동시에 실행 가능
- 명령어 뒤에 &를 붙여 실행, 다른 명령어를 추가적으로 입력 가능
- 백그라운드 프로세스
- 사용자의 터미널 세션이 종료되면 실행중인 프로세스도 종료됨
- nohup 명령어를 이용하여 백그라운드로 실행하면 사용자의 터미널 세션이 종료되어도 작업이 종료될 때까지 프로세스를 실행 가능
프로세스 목록 확인
컴퓨터에서 실행 중인 프로세스의 목록을 확인하고, 관리하기 위해서는 ps 명령을 사용할 수 있다. ps 명령만으로도 프로세스 목록을 파악할 수 있지만, 더 자세한 항목이 필요한 경우 여러 옵션을 사용할 수 있다.
- UNIX 방식:
ps -e
,ps -f
,ps -u uid
,ps -p pid
- BSD 방식:
ps a
,ps u
,ps x
ps 명령의 결과로 PID, TTY, TIME, CMD 등이 출력된다. 옵션을 사용하여 더 자세한 정보를 출력할 수 있으며, 각 항목의 의미는 다음과 같다.
- PID: 프로세스 번호
- TTY: 프로세스가 실행된 터미널의 종류와 번호
- TIME: 프로세스 실행 시간
- CMD: 실행되고 있는 프로그램의 이름(명령)
또한, pstree 명령을 사용하면 컴퓨터의 전체 프로세스를 구조화하여 확인할 수 있다. 부모 관계를 한 눈에 파악할 수 있도록 트리 구조로 도식화하여 출력된다.
사용법: pstree [options] [pid]
[options]
: 명령어 실행 시 함께 사용할 옵션[pid]
: 특정 프로세스 ID를 지정하여 해당 프로세스의 서브트리만 출력할 수 있음
주요 옵션:
a
: 프로세스에 관련된 명령어 라인을 전체 출력함.c
: 출력 내용을 짧게 함.h
: 현재 프로세스를 루트로 하는 서브트리 출력.p
: PID를 출력함.u
: 사용자 이름을 출력함.
프로세스 관리 - kill
- Ctrl + c : 프로세스 종료 이벤트 전달을 위한 시그널(signal)을 발생시키는 키
- kill 명령어: 특정 프로세스에 작업 중지, 실행 종료, 대기, 재시작, 강제 종료 등의 시그널을 전달하기 위한 명령어
kill -l
: 사용 가능한 시그널 종류 확인 가능- 주로 사용하는 시그널:
- SIGHUP : 재시작
- SIGINT : 실행 중지 시그널 (Ctrl + c)
- SIGKILL : 프로세스 강제 종료
- SIGTERM : 프로세스 정상 종료 (기본 명령)
- SIGCONT : 정지된 프로세스 실행
- SIGSTOP : 터미널에서 입력되는 정지 시그널
- SIGTSTP : 실행 정지 후 재실행 대기 (Ctrl+ z)
- kill 명령 사용 방법:
kill -시그널번호(시그널명) %작업번호
kill -시그널번호(시그널명) PID
프로세스 관리 - jobs
jobs
명령을 사용하여 현재 백그라운드에서 실행 중인 프로세스를 확인할 수 있다.- 작업 번호는
[1]
,[2]
와 같은 형태로 표시된다. +
기호로 표시된 프로세스는 현재 처리되고 있는 작업을,-
기호는 다음에 처리될 작업을 의미한다.
프로세스의 상태
- Running : 실행 중
- Stopped : 일시 중단(Ctrl + Z 입력)
- Terminated : 강제 종료(kill 명령 종료)
- Done : 정상 종료
포그라운드로 전환하기
fg %작업번호
명령을 사용하여 백그라운드에서 실행 중인 작업을 포그라운드로 전환할 수 있다.
서비스 관리
데몬과 서비스
데몬은 리눅스 환경에서 시스템 초기화 후 init이라는 프로그램에 의해 자발적으로 백그라운드에서 실행되는 프로그램을 의미한다. 일반적으로는 "백그라운드에서 작동하는 프로세스"라는 의미로도 사용된다.
- 하드웨어 장치 관리
- 보조 기억장치와 디렉토리의 연결(마운트)
- 네트워크를 통한 프로세스간 통신(소켓)
- 애플리케이션 수준의 서비스 제공
애플리케이션 수준의 서비스를 일반적으로 서비스라고 부른다. 운영체제의 관점에서는 데몬이지만, 사용자의 관점에서는 서비스로 불린다.
대표적인 데몬의 예로는 웹 서버(httpd)가 있다. 웹 페이지를 제공하는 프로세스가 상시 실행 중이어야 사용자가 어떤 웹 페이지에 접근하고 원하는 결과를 얻을 수 있다. 웹 서버는 백그라운드에서 작동되므로 데몬이라고도 부른다.
대표적인 데몬 : cron
cron 데몬은 스케쥴에 따라 명령을 실행하는 도구이다.
예를 들어, 매일 오후 10시에 백업 명령을 수행해줘. 와 같은 작업이 가능하고, cron은 해당 작업을 백그라운드에서 실행하기 때문에 사람의 개입 없이 자동적으로 주기에 따라 명령을 실행할 수 있다.
서비스 관리 (systemctl)
서비스나 데몬은 시스템을 관리하고 실행하는 중요한 역할을 한다. 이를 관리하기 위해 systemd를 사용할 수 있으며, systemctl 명령을 사용하여 서비스와 데몬을 관리할 수 있다.
systemctl 명령의 하위 명령 중 가장 많이 사용되는 것
명령 | 기능 |
---|---|
systemctl list-unit-files | 설치된 유닛(데몬) 목록을 보여줍니다. |
systemctl enable | 부팅 시 유닛을 활성화합니다. |
systemctl disable | 유닛이 부팅 시 비활성화됩니다. |
systemctl start | 유닛을 즉시 활성화합니다. |
systemctl stop | 유닛을 즉시 비활성화합니다. |
systemctl restart | 유닛을 즉시 재시작합니다. |
systemctl status | 유닛의 상태와 최근 로그를 조회합니다. |
서비스나 데몬의 상태를 파악하고, 제대로 작동하는지, 멈춰있다면 왜 멈춰있는지를 파악하고 재시작하는 일은 시스템 관리자의 중요한 역할이다.
위에서 예시로 들었던 cron 데몬은 시스템 초기화 후 자동으로 실행되는 데몬 중 하나이다. 이를 확인하기 위해 systemctl status 명령을 사용할 수 있다. 출력된 결과를 통해 데몬의 상태와 최근 로그를 확인할 수 있다.
'TIL' 카테고리의 다른 글
TIL [리눅스 운영체제 - 시스템 모니터링] #23.03.14 (0) | 2023.03.14 |
---|---|
TIL [리눅스 운영체제 - bash 스크립트] #23.03.13 (0) | 2023.03.13 |
TIL [리눅스 운영체제 - 관리자로서의 리눅스] #23.03.10 (0) | 2023.03.10 |
TIL [리눅스 운영체제 - 출력 관련 명령어] #23.03.10 (0) | 2023.03.10 |
TIL [리눅스 운영체제 - 리눅스/CLI명령어/패키지] #23.03.09 (0) | 2023.03.10 |