[Linux]프로세스 관리

BoongDev·2023년 3월 13일
0

Linux

목록 보기
2/3
post-thumbnail

프로세스, 스레드, 멀티 스레드


프로그램과 프로세스

  • 프로그램 : 프로그래밍 언어를 사용하여 수행절차를 표현해 놓은 명령어들의 집합. 정적인 상태의 파일
  • 프로세스 : 운영체제로부터 메모리를 할당받고 실행 되고 있는 프로그램
    • 하나의 프로그램을 여러 번 실행하면 여러 개의 프로스세(다중 프로세스)가 메모리 상에서 실행된다.

스레드

  • 스레드 : 사전적 의미로는 한 가닥의 실. 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스는 한 개 이상의 스레드가 존재하며 작업을 수행한다. 두 개 이상의 스레드를 가지는 프로세스를 멀티 스레드 프로세스라고 한다.
    • 한 프로세스 내에 스레드가 두 개라면 코드가 실행되는 흐름이 두 개 생긴다는 의미

멀티 스레드

  • 멀티 스레드 : 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다. 또한, 멀티 프로세스는 여러 개의 CPU 를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미한다.
  • ※ 멀티 스레드와 멀티 프로세스 차이
    • 둘 모두 여러 흐름을 동시에 수행하는 공통점을 가지고 있다.
    • 멀티 프로세스는 독립적인 메모리를 가지고 별도로 실행되지만, 멀티 스레드는 각 스레드가 속한 프로세스의 메모리를 공유한다는 점이 다르다.
  • 멀티 스레드의 장점 : 멀티 스레드는 각 스레드들이 자신이 속한 프로세스의 메모리를 공유해서 시스템 자원의 낭비가 적다. 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아진다.

프로세스 관리

프로세스 실행 방식

  • 포그라운드 방식(foreground)
  • 백그라운드 방식(background)

포그라운드 방식

사용자가 명령을 입력하고 이를 해석하여 실행한 뒤 결과를 화면에 출력한다. 사용자는 결과를 확인 한 뒤 다른 명령어를 입력하는 대화식으로 작업을 수행하게 되는 방식이다.

포그라운드 방식으로 처리되는 프로세스를 포그라운드 프로세스라고 한다.

백그라운드 방식

포그라운드 방식의 단점은 한 번에 하나의 명령을 실행하여 동시에 여러 프로세스를 실행하기 어려운 점이다.

백그라운드 방식은 프로세스가 실행되는 동안 뒤에서 다른 프로세스가 실행될 수 있다. 여러 개의 프로세스를 동시에 실행 가능하다.

리눅스에서의 사용

#포그라운드 방식
$ command
$ ping google.com

# 백그라운드 방식 - & 추가
$ command &
$ ping google.com &

# nohup 명령어 (no hang up)
$ nohup command &
$ nohup ping google.com &

여기서 백그라운드 방식은 & 를 붙여서 실행하는데, 백그라운드 실행시 사용자의 터미널 세션이 종료되면 실행중인 프로세스도 종료된다. 사용자 터미널 세션이 종료되어도 프로세스를 실행하고 싶다면 nohup 명령어를 사용한다.

프로세스 목록 확인

  • ps
    • 현재 실행중인 프로세스의 목록을 확인 할 수 있다.
      - PID : 프로세스 번호
      - TTY : 프로세스가 실행된 터미널의 종류와 번호
      - TIME : 프로세스 실행 시간
      - CMD : 실행되고 있는 프로그램의 이름(명령)

더 자세한 옵션

  • UNIX 방식
    • -e : 시스템에서 실행중인 모든 프로세스의 정보를 출력
    • -f : 프로세스의 자세한 정보를 출력
    • -u uid : uid 로 특정한 사용자에 대한 모든 프로세스의 정보 출력
    • -p pid : pid 로 지정한 특정 프로세스의 정보 출력
  • BSD 방식
    • a : 터미널에서 실행한 프로세스의 정보를 출력
    • u: 프로세스 소유자의 이름, CPU 사용량, 메모리 사용량 등 상세 정보 출력
    • x : 시스템에서 실행 중인 모든 프로세스의 정보 출력

가장 자주 사용하는 옵션 방식

  • ps -ef - UNIX , ps aux - BSD
    • ps -ef 출력 정보
      • UID : 프로세스 실행한 사용자 ID
      • PPID : 부모 프로세스 번호
      • C : CPU 사용량 (%)
      • STIME : 프로세스의 시작 날짜 또는 시간
      • TTY : 프로세스가 실행된 터미널의 종류와 번호
      • STAT : 프로세스 상태
    • ps aux 출력 정보
      • USER : 사용자 계정 이름
      • %CPU : CPU 사용량 (%)
      • %MEM : 물리 메모리 사용량 (%)
      • RSS : 사용하고 있는 물리적 메모리 크리 (kb)
      • VSZ : 사용하고 있는 가상 메모리 크기 (kb)
      • START : 프로세스 시작 시간
  • pstree
    • 컴퓨터의 전체 프로세스 구조 확인 명령어

    • 트리구조로 도식화하여 프로세스를 확인할 수 있으며, 부모 관계를 파악할 수 있다.

kill - 프로세스 종료

터미널에서 프로그램은 ctrl + c 로 종료할 수 있다. 단축키 사용시 이벤트가 발생되고, 이러한 이벤트를 프로세스에 전달하는 과정이 필요하다. 이 때, 이벤트를 프로세스에 알려주기 위해서 사용하는 것을 시그널(Signal) 이라고 한다.

특정 프로세스에 작업 중지, 실행 종료, 대기, 재시작, 강제 종료 등의 시그널을 전달하기 위해 kill 명령어를 사용한다. kill -l 사용하면 사용할 수 있는 시그널의 종류를 확인 할 수 있다.

주 사용 시그널

  • SIGHUP : 재시작
  • SIGINT : 실행 중지 = ctrl + c
  • SIGKILL : 강제 종료
  • SIGTERM : 정상 종료 = 기본 명령
  • SIGCONT : 정지된 프로세스 실행
  • SIGSTOP : 터미널에서 입력되는 정지 시그널
  • SIGTSTP : 실행 정지 후 재실행 대기 = ctrl + z

사용 방법

$ kill -<시그널번호 or 시그널명> %작업번호
$ kill -<시그널번호 or 시그널명> PID

jobs - 백그라운드 프로세스 확인

  • 프로세스 상태
    • Runnuing : 실행 중
    • Stopped : 일시 중단 (ctrl + z)
    • Terminated : 강제 종료 (kill 명령)
    • Done : 정상 종료

  • [1], [2] 는 작업번호이다.
  • + 는 현재 처리되고 있는 작업을 의미, - 다음에 작업할 프로세스를 의미한다.
  • 필요하다면 fg %<작업번호> 명령을 통해 포그라운드로 전환 가능
profile
욕심 많은 주니어 개발자입니다.

0개의 댓글