다디와 괴발개발

리눅스 명령어로 프로세스 관리 본문

DevOps/Linux

리눅스 명령어로 프로세스 관리

아임다디 2022. 3. 18. 23:41

프로세스 실행방식에는 포그라운드와 백그라운드가 있다. 명령들을 알아보기 이전에 둘의 개념을 먼저 짚어보자

포그라운드(foreground)

터미널에서 작업시, 사용자가 명령을 입력하면 이를 해석하고 실행하여 결과를 화면에 출력하는 것과 같은 과정을 말한다.

사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야하며, 이렇게 포그라운드 방식으로 처리되는 프로세스는 포그라운드 프로세스라고 한다.

포그라운드 방식은 한 번에 하나의 명령을 실행하므로, 동시에 여러 프로세스를 실행하기가 어렵다

백그라운드(background)

프로세스가 실행되는 동안 뒤에서 다른 프로세스가 실행되도록 한 터미널에서 여러 개의 프로세스를 동시에 실행하는 것을 말한다.

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

백그라운드 방식은 명령을 실행한 후 다른 작업을 해야할 경우에 주로 사용한다.

터미널에서는 명령어 뒤에 &를 붙여서 백그라운드 프로세스를 실행할 수 있으며, 다른 명령어를 추가적으로 입력 가능하다.
하지만, 사용자의 터미널 세션이 종료되면 실행중인 프로세스도 같이 종료되게 된다.
이때, nohub 명령어를 사용하면 사용자의 터미널 세션이 종료되어도 작업이 종료될 때 까지 프로세스를 실행할 수 있다.

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

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

# nohup 커맨드
$ nohub command &
$ nohub ping google.com &

프로세스와 관련된 리눅스 명령어

프로젝트를 하다보면 포트 사용과 관련 이슈로 인해 프로세스 관련 리눅스 명령어를 많이 사용하게 된다

하나씩 살펴보도록 하자!

ps : 현재 실행 중인 프로세스 목록 확인

ps 명령을 입력하면 여러 정보를 볼 수 있다

ps 명령어 입력

  • PID : 프로세스 번호
  • TTY : 프로세스가 실행된 터미널의 종류와 번호
  • TIME : 프로세스 실행 기간
  • CMD : 실행되고 있는 프로그램의 이름

옵션을 사용하면 더 디테일한 내용을 확인 가능하다. 옵션 방식에는 UNIX방식과 BSD 방식이 있다.

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

보통 프로세스 관계를 보기 위해 UNIX 방식의 ps -ef, 프로세스의 상태를 보기 위해 BSD 방식의 ps aux를 가장 많이 사용한다.

출력되는 정보들에 대한 간략한 설명!

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

 

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

pstree : 전체 프로세스를 트리 구조로 출력

컴퓨터의 전체 프로세스를 구조화하여 확인할 때 사용한다. 출력할 때는 트리 구조로 도식화해준다.

mac에서 pstree가 커맨드에 없다고 하면 Homebrew를 이용하여 설치해주면 된다

brew install pstree

jobs : 백그라운드 수행중인 프로세스를 확인

백그라운드에서 수행중인 프로세스를 확인하기 위해 사용되는 명령어이다

출력 결과에서 [1], [2]는 작업 번호를 가리키고, + 기호는 현재 처리 되고 있는 작업, - 기호는 다음에 작업할 프로세스 이다.

백그라운드 작업을 포그라운드로 전환하고 싶다면 fg %작업번호 명령을 입력해주면 된다.

프로세스의 상태에는 4가지가 있다

  • Running : 실행 중
  • Stopped : 일시 중단 (Ctrl + Z)
  • Terminated : 강제 종료 (kill 명령)
  • Done : 정상 종료

kill : 특정 프로세스에 시그널 전달

특정 프로세스에 작업 중지, 실행 종료, 대기, 재시작, 강제 종료 등의 시그널을 전달할 수 있는 명령이다.

특히 프로젝트를 진행하다 보면, 해당 포트를 이미 사용중이어서 충돌돼 실행이 안되는 경우에 자주 쓰이는 명령어다.

kill -l 명령을 사용하면 사용하 수 있는 시그널의 종류들을 확인할 수 있다

kill 명령을 실행하는 방법에는 두 가지가 있다. 작업번호를 적거나 PID를 적어주는 방식

kill -시그널번호(시그널명) %작업번호
kill -시그널번호(시그널명) PID

포트 넘버에 해당하는 PID를 확인하기 위해서는 lsof 명령어를 사용해줘서 확인해주면 된다

lsof -i :portnum # 사용중인 해당 Port의 PID 확인
kill -9 portnum # 해당 PID Process 종료