IWished
article thumbnail

프로세스 관리

프로그램과 프로세스

  • 프로그램: 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 수행절차를 표현해 놓은 명령어들의 집합
  • 프로세스: 컴퓨터에서 실행되고 있는 프로그램. 사용자가 프로그램을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당 받아 프로그램의 코드를 실행한다. 하나의 프로그램은 여러 개의 프로세스(다중 프로세스)를 만들 수 있다.

스레드(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 명령을 사용할 수 있다. 출력된 결과를 통해 데몬의 상태와 최근 로그를 확인할 수 있다.