리눅스/리눅스 마스터 2급

[리눅스 마스터 2급] 프로세스(Process)

공부하고 기억하는 공간 2023. 1. 14. 16:44
728x90
반응형
SMALL
  • 프로세스?

현재 실행중인 프로그램을 의미한다.

( 메모리에 적재되어, PCB(Process Control Block)이라는 형태로 OS에 의해 관리되는 상태)

 

프로세스와 프로그램은 절대 다르다.

시험에 안나오지만 아래 사진은 참고만 해두자.

 

https://watermelon-sugar.tistory.com/37



  • 프로세스(process)의 생성

 

  • fork - 새로운 프로세스를 위해 메모리를 할당받아 복사본 형태의 프로세스를 실행하는 형태

기존의 프로세스는 그대로 실행하고 원래의 프로세스와 똑같은 코드를 기반으로 실행한다.

보통 명령어를 내리면 fork형태로 수행된다.

 

  • exec - 원래의 프로세스를 새로운 프로세스로 대체하는 형태

호출한 프로세스의 메모리에 새로운 프로세스의 코드로 덮어 씌움

명령어 앞에 exec를 붙이면 기본 프로세스가 교체되며 새로운 프로세스가 할당된다.


  • 프로세스의 종류

 

  1. 포어그라운드 프로세스(전면 처리) = 명령 입력 후 수행종료까지 기다려야한다.
  2. 백그라운드 프로세스(후면 처리) = 사용자 입력에 관계없이 실행된다.
    프로세스 실행 명령 뒤에 &만 추가로 붙여 실행 하면 된다 ( 다중 작업시 유리)

 


  • 작업 상태 확인
  • jobs - 작업이 중지된 상태, 백그라운드로 진행상태 표시

jobs[옵션][작업번호]

 

-l : 프로세스 그룹 ID를 state 필드 앞에 표시

-n : 프로세스 그룹 중, 대표 프로세스ID 표시

-P : 프로세스 id를 한 행씩 표시

 

  • pstree : 실행중인 프로세스들을 트리 구조로 나타냄

pstree[옵션]

-p : 프로세스 ID 표시

-n : 프로세스 ID 정렬해서표시

-a : 명령행 인자를 포함한 정보를 트리 구조에 표시

-h : 현재 프로세스와 부모 프로세스를 음영으로 강조하여 표시

 

  • ps : 현재 실행중인 프로세스 상태

ps[옵션]

-a : 현재 실행중인 모든 프로세스 출력

-U : 특정 사용자 중심으로 프로세스 확인

-u : 사용자 이름과 프로세스 시작 시간 출력

-x : 접속된 터미널 뿐 아니라 사용되고 있는 모든 프로세스 출력

-e : 모든 프로세스 정보 출력(소유자 정보X)

-ef : 모든 프로세스에 대한 정보를 full-format으로 볼 수 있다.(소유자 정보O)

-fp : 특정 프로세스의 pid를 이용해 확인

-l : 자세한 정보 출력

 

  • ps가 보여주는 column들의 의미
  1. USER : 프로세스를 소유한 사용자
  2. PID : Process ID
  3. %CPU : cpu사용률
  4. $MEM : memory 사용률
  5. VSZ: 가상 메모리 사용량
  6. RSS : 실제 메모리 사용량
  7. TTY : 프로세스를 컨트롤 하는 터미널
  8. STAT : 현재 프로세스의 상태
  9. START : 프로세스 시작날
  10. TIME : 프로세스가 지금까지 사용한 CPU시간
  11. COMMAND: 프로세스 실행할 떄 사용된 CMD
  • ps가 보여주는 프로세스 상태(stat)

 

  • S : interruptible sleep (event를 완료하기 위해 기다리는 상태)
  • R : Running or runnable (on run queue)
  • I : Idle kernel thread
  • Z : Zombie 프로세스 상태
  • D: Uninterruptible sleep, 입출력을 기다리는 상태
  • T : job control signal에 의해 멈춰있는 상태

 

  • kill : ps 종료. 

kill[옵션][시그널 번호 or 이름][PID or 작업번호]

-l : 시그널 종류 나열

-s  + 시그널 번호 : 전달할 시그널의 종류 지정

-1 -HUP : 프로세스를 제작

-9 : 프로세스를 강제로 종료

-15: 프로세스를 종료

 

  • killall : 여러개의 프로세스를 한 번에 종료.

killall[옵션][프로세스명]

-g : 그룹을 지정하여 프로세스 종료

-i : 프로세스 종료 전 확인 메세지 표시

-l : 시그널 목록 표시

-v : 상세 정보 표시

 

  • nice : (새로운)프로세스 우선 순위 확인, 변경
    -20(가장 높은 우선순위)~19(가장 낮은 우선순위)까지 우선순위가 있고 기본값은 10이다.

 

  • renice : 이미 실행중인 프로세스 우선순위 변경

renice[옵션][NI값][옵션명]

-p : 프로세스ID지정

-u : 사용자명 지정

-g : 프로세스의 GID 지정

 

  • nohup : 프로세스가 중단되지 않고 백그라운드에서 작업 수행
    로그아웃 또는 터미널 창이 닫혀도 계속 실행되는 프로세스
    백그라운드로 작업될 수 있도록 뒤에 '&'표시

 

  • top : 시스템의 운영 상태를 실시간으로 모니터링.

top[옵션][PID]

 

-d 시간 : 실시간 화면 출력 시간 지정(초단위)

-p PID : 모니터링 할 프로세스 PID지정

-h 또는 ? : 도움말

-i : 좀비 프로세스 감춤 또는 보여줌

-n : 지정된 개수만큼 프로세스 화면에 표시

-r : renice값 변경하여 실행 우선순위 조정

-k PID : 지정된 PID 종료

q or Ctrl_C : top 실행 종료

 


  • 프로세스 식별 함수

 

  • 프로스세스 PID (Process ID) -각각의 프로세스들은 실행이 된 후, 운영체제에 의해서 식별받은 고유 ID를 가진다.

관련 프로세스가 모여 프로세스 그룹(Process Group)을 만들게 된다.

PID는 0번 부터 시작하게 된다.

0 : 스케줄러(Sched)

1 : init 으로 프로세스를 실행시키면 자동으로 할단된다.

 

  • PPID(Parent Process ID) : 0번을 제외한 모든 프로세스는 자신을 호출한 부모 프로세스

 

  • 프로세스 그룹 PGID(process group id) -  프로세스를 묶은 것

 

PGID 내부에 하나의 프로세스가 대표 PID를 부여받고, 이 리더 프로세스가 변하면, PGID 또한 변경된다.

 


  • siganl : 프로세스에 이벤트 발생을 전달해주는 소프트웨어 인터럽트. ( kill -l 에서 리스트 확인 가능)

 

예시 ) 시그널번호.시그널 = 설명

 

  • 1.SIGHUP = 터미널과 연결이 끊어졌을 때
  • 2.SIGINT = Ctrl + c 입력시 : 종료
  • 3.SigQUIT = Ctrl_l 입력시 : 코어덤프
  • 6.SIGAMRT = abort(비정상 종료 함수)에 의해 발생
  • 9.SIGKILL = 프로세스 강제 종료 시
  • 13.SIGPIPIE = 종료된 소켓에 쓰기 시도
  • 14.SIGALRM = 알람 타이머 만료 시 발생
  • 15.SIGTERM = kill 시스템 호출 시 발생
  • 16. SIGCHLD = 자식 프로세스 종료 시 발생
  • 17. SIGCHLD = 중지된 프로세스 실행 시 발생
  • 18. SIGCONT = 중지된 프로세스 실행 시 발생
  • 19. SIGSTOP = SIGCONT 시그널 받을 때 까지 종료
  • 20. SIGSTP = Ctral+z 입력 시 : 프로세스 대기
728x90
반응형
SMALL