본문 바로가기

OS/Linux

[Linux]프로세스 관리

프로세스 실행 방식

리눅스의 프로세스는 포그라운드와 백그라운드방식으로 동작한다.

  • 포그라운드(foreground): 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 방식. 대화식
  • 백그라운드(background): 한 터미널에서 여러 개의 프로세스를 동시에 실행할 경우, 뒤에서 실행되는 방식.
# 포그라운드 방식 
$ command
$ ping google.com

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

# nohup 커맨드(no hang up)
$ nohup command &
$ nohup ping google.com &

프로세스 목록 확인

ps

현재 실행 중인 프로세스의 목록을 확인한다.

ps

  • 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


jobs

백그라운드에서 수행 중인 프로세스를 확인한다.

sample.sh이라는 쉘 스크립트를 편집하기위해 텍스트편집 프로그램 vim을 백그라운드에서 실행하고 프로세스를 확인해보자.

jobs

[1], [2]는 작업 번호를 의미하고, +는 현재 처리되고 있는 작업, -는 다음에 작업할 프로세스를 의미한다.

그 옆의 '멈춤'은 다음을 의미한다.

  • Running : 실행 중
  • Stopped : 일시 중단(Ctrl + Z 입력)
  • Terminated : 강제 종료(kill 명령 종료)
  • Done : 정상 종료
fg %작업번호 //백그라운드 -> 포그라운드 작업전환

 


kill

프로세스가 종료될 때, 프로그램을 종료하는 이벤트가 발생하고 이를 프로세스에 전달하는 과정이 필요하다.

프로그램을 종료하는 이벤트를 시그널(Signal)이라 하고, 프로세스에 전달하는 명령어를 kill이라 한다.

kill -l //이를 통해 다양한 시그널의 종류를 확인할 수 있다.

그러나 자주 쓰이는 시그널은 다음과 같다.

더보기
  1. SIGHUP : 재시작할 때 사용
  2. SIGINT : 실행 중지 시그널, Ctrl + c
  3. SIGKILL : 프로세스 강제 종료
  4. SIGTERM : 프로세스 정상종료 (기본 명령)
  5. SIGCONT : 정지된 프로세스 실행
  6. SIGSTOP : 터미널에서 입력되는 정지 시그널
  7. SIGTSTP : 실행 정지 후 재실행 대기, Ctrl+ z

시그널을 이용해 프로세스를 종료시키려면 다음과 같은 문법으로 사용한다.

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