리눅스 심화(1d) - 프로세스 개념과 관리

chaeyoung·2022년 5월 9일
0

리눅스(CentOS)

목록 보기
4/13

프로세스

  • 현재 시스템에서 실행 중인 프로그램
  • PID: 프로세스의 고유 번호
  • pstree : 현재 실행중인 프로세스 출력
  • pstree -p : PID도 같이 출력
    • pid : 프로세스 고유 번호

1. 프로세스 부모-자식 관계

  • 필요시 부모 프로세스 자식 프로세스 생성
  • 필요시 자식 프로세스도 자식 프로세스 생성
  • 모든 프로세스는 부모 프로세스 존재(스케줄러가 실행한 근본 프로세스 systemd, kthreadd를 제외 )
    • systemd : 1번 프로세스, kthreadd : 2번 프로세스
  • 자식 프로세스 작업 완료 ==> 부모 프로세스 결과 전송 ==> 자식 프로세스 종료

2. 프로세스 종류

데몬 프로세스

  • 리눅스 커널에 의해 실행
  • 특정 서비스를 제공

고아 프로세스

  • 자식 프로세스 종료 전 부모 프로세스 먼저 종료시 발생
  • 자식 프로세스 ==> 고아 프로세스 되면 1번 프로세스(systemd)가 새로운 부모 프로세스 됨 ==> 고아 프로세스 작업 종료 지원

좀비 프로세스

  • 자식 프로세스 종료 했음에도 프로세스 테이블 목록에 존재
  • defunct 프로세스
  • 좀비 프로세스 증가 ==> 테이블 용량 부족(부하) ==> 일반 프로세스 실행x

좀비 프로세스 찾기

  • ps -ef|grep defunct
  • ps aux|grep defunct

3. 프로세스 관리 명령

PS : 현재 실행 중인 프로세스 목록 출력

ps -ef : 시스템에서 실행중인 프로세스 상세 목록

  • 유닉스(SVR4) 옵션
  • TTY : 가상 콘솔, 프로세스가 실행된 터미널 종류 or 번호
  • f: 상세 정보 출력
    • c : CPU 사용량
    • CMD : 실행되고 있는 프로그램
  • e : 시스템에서 실행 중인 모든 프로세스 정보 출력
  • TTY 값 ? : 대부분 데몬으로 시스템 실행한 프로세스

ps aux

  • BSD 옵션
  • a: 터미널에서 실행한 프로세스 정보 출력
    • STAT에 사용되는 문자의 의미
      • R: 실행중
      • S: 인터럽트 가능한 대기 상태
        • 인터럽트: 인터럽트란 CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능이다
      • Z: 좀비 프로세스
      • T: 작업 정지
  • u: 특정 사용자에 대한 모든 프로세스의 정보 출력
  • x: 시스템에서 실행 중인 모든 프로세스 정보 출력

출력 정보

  • %CPU : cpu 사용량
  • %MEM: 메모리 사용량
  • VSZ : 사용중인 가상 메모리 크기
  • RSS : 사용중인 물리 메모리 크기

ps -u user1

  • 특정 사용자의 프로세스 목록 출력
  • ps -uf user1

ps -ef | grep bash

  • ps 명령을 이용한 특정 프로세스 정보 검색

pgrep: 특정 프로세스 정보 검색

  • 지정한 패턴과 일치하는 프로세스 정보 출력
  • -x : 패턴과 정확히 일치하는 프로세스 정보(PID) 출력
pgrep -x bash
  • -l : PID와 프로세스 이름 출력
pgrep -l bash
  • ps -fp $(pgrep -x bash)
    • -p : pid로 지정한 특정 프로세스의 정보를 출력
    • $(): 명령 결과를 나타냄

4. 시그널

  • 프로세스에 이벤트 알림

kill -l

  • 리눅스에서 지원하는 시그널 목록 출력

주요 시그널

SIGNT(2)

  • Ctrl + c
  • 인터럽트 사용자가 Ctrl + c 를 입력하면 발생
  • 종료

SIGKILL(9)

  • 해당 시그널을 받은 프로세스는 강제 종료
  • 종료

SIGTERM(15)

  • 종료
  • kill 명령이 보내는 기본 시그널

kill

  • 지정한 시그널을 프로세스에 전송
kill [-시그널] PID

문제

man을 실행시킨 프로세스를 찾아서 종료시키기

  • user 명령
ps -fp $(pgrep -x man)
  • root 명령
kill -9 pid

pkill

  • PID가 아니라 프로세스 명령 이름으로 프로세스 찾아 종료
  • 위험하기 때문에 사용 추천 x
  • 문제 man을 실행시킨 프로세스를 찾고 pkill을 사용하여 해당 프로세스 종료

top 명령

  • 현재 실행 중인 프로세스에 대한 정보를 주기적으로 출력
  • h : 도움말
  • k : 프로세스 종료, 종료할 프로세스의 PID 묻기
  • n : 출력할 프로세스 개수 바꾸기
  • P : cpu 사용량에 따라 정렬
  • M : 사용하는 메모리 크기에 따라 정렬 출력
  • us(usage), sy(system), id(idle(쉬는중))

htop

  • 해당 명령을 더 추천함
  • htop 명령어 정보
    • PRI : 우선 순위
    • NI : NICE, 친절도, 낮을수록 cpu 배당율 상승
    • VIRT : 프로세스가 사용하는 가상 메모리 크기
    • RES : 프로세스가 사용하는 메모리 크기
    • SHR : 프로세스가 사용하는 공유 메모리 크기
  • 명령어 설치 방법
  • htop 설치 방법
profile
안녕하세요! 풀스택 개발자가 되고싶은 윤채영입니다. 제 블로그에 방문해주셔서 감사합니다!~~

0개의 댓글