8강 / 20강

프로세스 — 살아 움직이는 프로그램

CPU 하나로 수백 가지 일을 동시에 하는 마술

프로세스 — 살아 움직이는 프로그램
프로그램은 악보, 프로세스는 지금 울리는 연주입니다.

1강에서 던진 질문으로 돌아옵시다. CPU가 하나인데 어떻게 동시에 여러 일을 할까?

먼저 용어를 정리해야 합니다. app.py 라는 파일은 프로그램입니다. 디스크에 가만히 누워 있는 글자 덩어리예요. 그런데 그걸 실행하는 순간 메모리로 올라가서 살아 움직이기 시작합니다. 그것이 프로세스(process)입니다.

📄 프로그램
app.py (디스크의 파일)
악보 · 요리법 · 설계도
가만히 있음. 하나뿐
🏃 프로세스
지금 돌고 있는 gunicorn 3개
연주 · 요리 · 공사
움직임. 같은 프로그램에서 여러 개

같은 악보로 세 사람이 동시에 연주할 수 있듯, 같은 app.py 에서 프로세스 3개가 만들어질 수 있습니다. 우리 쇼핑몰이 정확히 그렇습니다.

지금 이 서버에서 살아 움직이는 모든 프로세스
bash 내 가상 Ubuntu 서버에서 실행

표의 각 칸이 무엇인지 읽어 봅시다.

PID프로세스 번호주민등록번호. 겹치지 않는 유일한 번호
USER누구의 것인가이 프로세스가 가진 권한
%CPUCPU를 얼마나높으면 서버가 느려집니다
%MEM메모리를 얼마나높으면 9강의 문제가 생깁니다
COMMAND무슨 프로그램인가어떻게 실행되었는지까지

PID 1 을 눈여겨보세요. /sbin/init 입니다. 부팅할 때 커널이 만든 최초의 프로세스이고, 다른 모든 프로세스의 조상입니다. Ubuntu에서는 이 자리를 systemd 가 맡습니다 (15강 주인공).

🎮 CPU 하나를 나눠 쓰는 장면

아래 실험실에서 프로세스를 여러 개 만들고 재생을 눌러 보세요. CPU 한 칸이 프로세스들 사이를 번개같이 오가는 모습이 보입니다. 이것이 멀티태스킹의 정체입니다.

스케줄러 실험실 — CPU 한 개가 여러 일을 오가는 모습
불러오는 중…

top — 살아 있는 상황판

ps 가 사진이라면 top 은 동영상입니다. 서버가 느려졌을 때 관리자가 가장 먼저 치는 명령이에요.

누가 CPU를 잡아먹고 있는지 한눈에
bash 내 가상 Ubuntu 서버에서 실행

내 쇼핑몰의 프로세스만 골라 보기

수백 개 중에서 원하는 것만 찾으려면 grep 과 짝지어 씁니다. 이 | 기호가 무엇인지는 10강에서 배우지만, 지금 미리 맛만 봅시다.

쇼핑몰을 돌리는 프로세스 4개 — 대장 1 + 일꾼 3
bash 내 가상 Ubuntu 서버에서 실행

gunicorn: master 하나와 worker 셋이 보이나요? 이것이 웹 서버의 흔한 구조입니다. 대장이 손님을 받아 일꾼들에게 나눠 줍니다. 일꾼이 셋이라 손님 세 명을 동시에 받을 수 있어요.

kill — 프로세스에게 신호 보내기

이름이 무섭지만, kill 은 사실 신호를 보내는 명령입니다. 기본 신호는 "정리하고 끝내 줘"라는 정중한 부탁이에요.

kill PID — TERM 신호
"하던 일 정리하고 끝내"
저장하고 파일을 닫을 시간을 줍니다 👍
kill -9 PID — KILL 신호
"지금 즉시. 거절 불가"
저장 못 하고 죽습니다. 최후의 수단
먼저 대장(master)의 PID 번호를 확인하세요
bash 내 가상 Ubuntu 서버에서 실행
쇼핑몰이 지금 살아 있는지 확인
bash 내 가상 Ubuntu 서버에서 실행
직접 죽여 보고 되살려 보세요
불러오는 중…

foreground 와 background

명령 뒤에 & 를 붙이면 뒤에서 돌게 하고 프롬프트를 바로 돌려받습니다. 오래 걸리는 작업을 걸어 놓고 다른 일을 할 때 씁니다.

🤔 확인 문제
프로그램과 프로세스의 차이를 바르게 설명한 것은?
🤔 확인 문제
서버가 갑자기 느려졌을 때 가장 먼저 실행해 볼 명령은?
🤔 확인 문제
kill -9 를 함부로 쓰면 안 되는 이유는?