10. 프로세스 제어 - 이론

prana·2023년 2월 18일
0

Linux

목록 보기
10/28

출처: 따라하면서 배우는 it - 유튜브👍

프로세스란? : 실행된 프로그램. 실행 파일.

*프로세스 : 어떤 결과를 위해 프로그램을 실행하는 것을 의미.

  • 눈에 보이는 프로세스(포 그라운드) : 인터넷, 카카오톡, 메모장, 그림판 등
  • 눈에 보이지 않는 프로세스(백그라운드): 백신 프로그램, 그래픽 드라이버, 마이크 드라이버 등 눈에 보이지 않는 프로그램
  • 이 두 가지 프로세스 개념은 리눅스뿐 아니라 모든 운영체제에서 사용됨

목차

  1. 프로세스란 ?
    • 프로세스란, 프로세스의 종류
  2. 프로세스 관련 명령어
    • ps 명령어, 기타 명령어
  3. 프로세스 제어 명령어
    • 시그널 번호, kill, pkill 명령어
  4. 따라학IT
    • 프로세스 확인/제어 해보기.

프로세스란?

  • 프로세스 : 하드디스크라고 하는 곳에 저장되어 있는 프로그램, 또는 실행 파일을 더블클릭하거나 파일 이름을 입력하여 실행하면 실행 중인 상태로 메모리 위에 올라가 있는 것을 프로세스라고 한다.
  • 보통 윈도우에서는 PID가 표시가 안돼서, 따로 표시를 해줘야 한다.
  • PID : 프로세스의 ID값, 숫자값. 운영체제가 프로세스를 구분할 때, 숫자로만 구분을 한다.


프로세스의 종류

  • 상황에 따라 명칭이 달라지는 프로세스

1. 부모 프로세스

  • 다른 프로세스를 생성할 수 있는 프로세스
    • ex) 크롬 중에서 하나가 부모 프로세스인데, 그걸 닫으면 탭 전체가 다 닫힌다.

      2. 자식 프로세스
  • 부모 프로세스로부터 만들어지는 프로세스
  • (누군가에 의해 실행이 되어지는)
  • 정상적으로) 자식 프로세스 종료 후 부모프로세스 종료

3. 데몬 프로세스

  • 일반적으로 사용자가 실행시키지 않고 커널에 의해 구동, 백그라운드로 동작
  • 특정 서비스를 제공하기 위해 구동
  • 파일 이름 끝에 'd'를 붙여 사용하는 것이 일반적
  • 'Windows의 서비스(백 그라운드로 동작하는)'와 같은 존재
  • 리눅스에서는 많이 쓴다.
    • ex) 서버 프로그램, 웹 서버 프로그램, 스마트폰에도 톰캣 웹서버 설치 가능.
    • 특징은 프로그램 이름 맨 끝에 d : ex) tftpd, httpd(아파치 웹 서버)

4. 고아 프로세스

  • 일반적으로 자식프로세스는 종료되면 부모 프로세스로 되돌아 가는데,
    부모 프로세스가 먼저 종료된 경우에 자식 프로세스를 고아 프로세스라고 한다.

  • 고아 프로세스는 init 프로세스가 처리해준다. (리눅스에서 최고 조상. 거의 사라짐, systemd로 넘어감)

    • 조금 비정상적인 애들. 메모리 공간을 반납을 하고 종료가 되어야 한다.
    • 원래대로라면 부모 프로세스가 처리를 해줌. 그런데, 부모 프로세스가 먼저 종료가 됨
    • init, systemd가 하는 일: 컴퓨터가 처음 부팅됐 때 기본적으로 실행되어야 하는 프로그램들을 대부분 얘네가 실행시켜줌. 단군할아버지 같은 존재.

5. 좀비 프로세스

  • 정상적으로 프로세스를 종료했지만 자원을 반납하지 않은 상태로 계속 남아있는 상태
  • 자원을 점유한 상태에서 동작하지 않는 프로세스
    • 계속 종료가 되긴 하지만, 자원은 계속 사용하고 있는 상태. 죽었는데 죽지 않은 느낌.

프로세스 관련 명령어 - ps 명령어

윈도우의 작업 관리자와 비슷한 ps 명령어

  • 그냥 ps만 실행하게 되면, 현재 사용자(로그인한 사용자)가 실행한 프로세스만 보인다. 그래서 목록에 ps도 나옴.
  • 터미널 치는 bash쉘도 실행.
  • root로 로그인 한 상태면 su도 뜸.

  • -ef 옵션을 통해 내용을 좀 더 자세하게, 내가 실행하지 않은 운영체제가 자동으로 실행했다거나 하는 프로세스까지도 전부 보여줌.

  • /ust/lib/systemd/s...(잘림) : 프로세스의 조상님. PID가 1. 부팅이 되면 첫 번째로 실행이 됨.

옵션--
-e시스템 상의 모든 프로세스 정보를 출력
-f상세한 정보 출력
일반적으로 ps -ef 명령어를 많이 사용한다. ps -ef 명령어의 결과는 다음과 같이 나온다.
UID프로세스 소유자 ID
PID프로세스 ID (Process Identification Number)
PPID부모 프로세스 ID

Parents Process Identification Number
C스케줄링을 위한 CPU 사용량, 별로 의미 없는 필드
STIME프로세스 시작 시간
TTY장치 번호(? :: 터미널에서 실행된 프로세스가 아닌 것들)
TIME프로세스에 대한 누적 실행 시간
CMD명령 옵션 + 아규먼트(Argument)

  • pstree : 부모자식 관계를 트리형식, 족보?처럼 해주는 명령어
    • 보면, systemd로부터 시작되는 것을 알 수 있음.

  • ps -ef | grep bash

  • pgrep bash: pid만 한 번에 확인할 수 있다.

  • top 명령어 프로세스 목록 조회, 윈도우의 작업관리자처럼 CPU/메모리 사용량을 같이 표시해줌.


프로세스 제어 명령어 - 시그널 번호

프로세스를 제어할 때 사용하는 시그널 번호

시그널 번호설명
1- SIGH UP(Sig Hang Up)

- 프로세스 종료 없이 프로그램을 새로 초기화
2- SIGINT -Interrupt

- Ctrl + C 명령어 실행 중 중단 명령어
9- SIGKILL

- kill

- 무시할 수 없는 종료(Strongest)
15-SIGTERM

- terminate

- 무시할 수 있는 종료
  • 시그널은 프로세스를 제어하기 위해서 프로세스에 전달하는 신호값

프로세스 제어 명령어2 - kill, pkill

프로세스에게 시그널 번호를 전송하는 Kill, pkill 명령어

  • kill 또는 pkill 명령어는 프로세스에게 시그널 번호를 전달할 때 사용하는 명령어
명령어설명
killPID로 프로세스를 제어
pkill프로세스 이름으로 제어 :: 이름에 해당하는 프로세스 모두 down 가능
  • 옵션으로 시그널 번호를 지정한다.
  • kill은 아규먼트로 pid(하나의 프로세스만 한번에 지울 수 있다.)를, pkill은 프로세스 이름을 입력한다.
  • (pkill은 한 번에 다 종료, 똑같은 이름의 프로세스가 동시에 동작할 수 있기 때문에)

🎈따라學IT

  1. 프로세스 확인해보기
    • 윈도우의 작업관리자처럼 현재 시스템에서 실행중인 프로세스 확인해보기
  2. 프로세스 제어해보기
    • 특정 프로세스를 시그널 번호를 이용해서 제어해보기

실습

  • sleep 초옵션 + & 하면, 백그라운드로 실행
  • ps 입력해도 백그라운드로 실행하는거라, sleep 명령어가 실행되고 있는 것을 알 수 있다.

  • 더 자세하고 다양하게 뜨는 것을 볼 수 있다.

  • 목록이 길게 뜨는데, 현재 로그인 외 시스템에서 동작 중인 모든 프로세스들이 다 뜨게 되는 것. ps -ef로 보통 사용.

  • PPID가 0인 애들은 운영체제의 커널이라고 생각하면 됨. 운영체제가 PID 1을 동작 시키고, 나머지를 실행시킴.

  • 방향키로 이동 가능,
  • CPU 사용량, 메모리 사용량이 있음. 이것들이 많이 차면 시스템이 느려짐. 100%가 되면 어떤 작업도 수행을 못함
  • ex) 방지 위해 서버를 2개를 준비해서 서버 부하를 분산 시키기
  • 나갈 땐 q


  • 종료시킬 때 kill -9 54584

  • 확인할 때는 ps -ef | grep pid명

  • pkill 로 죽일 때는 프로세스명으로.

  • 프로세스는 계속해서 여러 가지 프로그램을 다뤄볼 것이기 때문에, 잘못되면 종료할 줄 알아야 한다.

0개의 댓글