프로세스
프로세스 번호와 작업 번호
- 프로세스 번호
- CPU가 프로세스를 구분하기 위해 부여되는 고유 번호
- 각 프로세스가 가지는 고유의 번호를 PID라고 함
- 작업 번호 (Job number)
- 현재 셸에서 실행되는 작업을 구분·제어하기 위해 셸에서 부여하는 식별 번호
프로세스 서비스와 관계
- 데몬 프로세스
- 우분투에서 특정 서비스를 제공하기 위해 존재하는 프로세스
- 시스템 백그라운드에서 계속 실행되며 특정 기능이나 서비스를 제공하는 프로세스
- 부모-자식 관계의 프로세스
- 부모 프로세스는 PPID를 가지며 자식 프로세스는 PID를 보유
고아 프로세스와 좀비 프로세스
- 고아 프로세스
- 부모-자식 관계의 프로세스에서 자식 프로세스가 종료되지 않은 상태에서 부모 프로세스가 종료되는 경우
- 고아 프로세스의 종료는 1번 프로세스를 부모 프로세스로 의존하게 되어 작업을 무난히 마치고 프로세스를 종료하게 됨
- 좀비 프로세스
- 부모 프로세스가 자식 프로세스의 종료를 기다린 뒤에 종료를 처리해 주는 정상적인 과정을 거치지 않고 부모 프로세스를 종료할 경우 발생하게 되는 프로세스를 의미 (자식 프로세스가 종료된 상태)
- 좀비 프로세스는 kill 명령으로 제거할 수 없음 (SIGCHLD 시그널을 부모 프로세스에 보내 부모 프로세스가 자식 프로세스를 정리하도록 수행하거나 부모 프로세스 자체를 종료해야만 좀비 프로세스를 제거할 수 있음)
프로세스 관리 명령
프로세스 상태 확인: ps 명령
우분투에서 ps 명령의 옵션은 유닉스, BSD, GNU 3가지 유형으로 지원
ps [옵션] : 현재 실행 중인 프로세스의 상태 확인
옵션
<유닉스 옵션>
-e : 시스템에서 실행 중인 모든 프로세스의 정보 출력
-f : 프로세스에 대한 상세한 정보 출력
-u UID : 특정 사용자에 대한 모든 프로세스의 정보 출력
-p PID : PID로 지정한 특정 프로세스의 정보 출력
<BSD 옵션>
a : 터미널에서 실행한 프로세스의 정보 출력
u : 프로세스 소유자의 이름, CPU와 메모리 사용량 등 상세한 정보 출력
x : 시스템에서 실행 중인 모든 프로세스의 정보 출력
<GNU 옵션>
--pid PID 목록 : 목록으로 지정한 특정 PID 정보 출력
옵션 한번에 여러 개 사용 가능
ps : 프로세스 목록 출력 (현재 프로세스 상태 정보)
| 항목 | 의미 |
| PID | 실행 중인 프로세스를 구별하기 위한 프로세스의 고유 ID |
| TTY | 프로세스가 시작되고 있는 현재 터미널 번호 |
| TIME | 해당 프로세스가 현재까지 사용된 CPU의 시간과 양 |
| CMD | 프로세스가 실행한 명령이 무엇인지를 알려줌 |
각 터미널마다 PID와 TTY가 다름
ps -f : 현재 프로세스의 상세한 정보 출력
항목 기능
| 항목 | 기능 |
| UID | 프로세스를 실행한 사용자 ID |
| PID | 실행 프로세스 번호 |
| PPID | 부모 프로세스 번호 |
| C | CPU 사용량을 % 값으로 표시 |
| STIME | 프로세스 시작 날짜 또는 시각 |
| TTY | 터미널의 종류와 번호 |
| TIME | 프로세스 실행 시간 |
| CMD | 실행되고 있는 프로그램 이름 |
cf. ps -p PPID (이때 CMD가 bash인 PPID 입력) : CMD가 gnome-terminal임
프로세스 관리
- 특정 프로세스 정보를 검색할 때는 pgrep 명령 사용
- ps 명령과 grep 명령을 하나로 통합하여 만든 명령어로 인식
- pgrep 명령은 옵션 다음에 선언한 인자와 일치하는 패턴의 프로세스를 찾아 PID를 알려줌
pgrep [옵션] [인자] : 인자와 일치하는 패턴의 프로세스 정보 출력
옵션
-x : 인자와 정확히 일치하는 패턴의 프로세스 정보 출력
-n : 인자를 포함하고 있는 가장 최근의 프로세스 정보 출력
-u 사용자 계정 이름 : 특정 사용자 계정에 대한 모든 프로세스의 정보 출력
-l : PID와 프로세스의 이름 출력
-t term : 특정 단말기와 관련된 프로세스의 정보 출력
pgrep -x bash : bash 프로세스의 PID 정보 출력
pgrep -l bash : bash 프로세스의 PID와 프로세스의 이름 출력
ps -fp $(pgrep -x bash) : pgrep -x bash 명령의 실행 결과(PID 목록)을 ps 명령의 -p 옵션에 전달
cf. $(pgrep -x bash): command substitution
- kill 명령으로 프로세스 종료
- 프로세스를 종료하는 kill 명령은 종료할 프로세스에 인자로 지정한 숫자 메시지를 시그널로 보내 해당 프로세스를 종료
- 프로세스에 보내는 시그널은 인터럽트, 프로세스 종료, 강제 종료 등의 숫자로 기능이 지정되어 있음
kill [시그널] PID : 프로세스 종료를 위해 지정한 시그널을 해당 프로세스에 전달
시그널
-2 : 인터럽트 시그널 전송 (Ctrl+C)
-9 : 프로세스 강제 종료
-15 : 프로세스가 관련 파일을 정리 후 종료 (종료되지 않는 프로세스도 존재)
- kill 명령으로 프로세스를 종료하기 위해 2개의 터미널 창 실행
yes > /dev/null : 무한루프 명령 수행
cf. /dev/null : 아무런 반응을 하지 않는 장치 선언, yes: yes 라는 문자열을 화면에 반복해서 출력하라는 의미
Ctrl+C를 누르면 강제 종료됨 (Ctrl+Z는 일시 중단)
강제 종료 방법
- 새 터미널에서 ps -ef | grep yes 로 PID 확인 → kill -9 PID로 강제 종료
- ps -fp $(pgrep -x yes) → kill -9 PID
- pkill 명령으로 프로세스 종료 (잘 사용하진 X)
- kill 명령와 같이 시그널을 보내는 방식은 같음
- PID를 보내는 것이 아니라 프로세스의 명령이름으로 프로세스를 찾아서 종료해 줌 (kill 명령과 차이점)
- 같은 명령으로 수행한 프로세스를 명령 이름으로 찾아주기 때문에 pkill yes와 같이 한꺼번에 같은 이름의 명령을 찾아서 모두 종료할 수 있다는 편의성 제공
문제 10-01
- ps 명령과 옵션으로 프로세스의 상세한 정보 출력하기
- pgrep 명령으로 bash를 실행하고 있는 프로세스의 PID 출력하기
- ps 명령과 옵션으로 터미널에서 실행한 프로세스의 정보 출력하기
$ ps -f
$ pgrep -x bash
$ ps a
포그라운드와 백그라운드
포그라운드
- 터미널 창에서 명령어를 입력하면 셸은 사용자가 입력한 명령을 수행하여 그 결과를 화면에 보여줌
- 사용자는 화면에 나타난 출력결과를 보고 다른 명령을 입력하는 대화식으로 수행하는 작업
- 즉, 사용자와 상호작용을 하여 작업을 수행하도록 해주는 프로세스를 포그라운드 작업이라 함
백그라운드
- 프로세스가 실행되었지만 직접 눈으로 프로세스가 확인되지 않는 작업
- ex) 백신 프로그램, 서버 데몬 등과 같이 화면에 나타나 눈에 보이지는 않지만 실행되는 명령 작업
- 이때 수행하는 프로세스를 백그라운드 프로세스라 함
sleep 10 : 10초 동안 포그라운드 작업 (작업이 끝날 때까지 기다려야 함)
sleep 30& : 30초 동안 백그라운드 작업 (다른 작업 수행 가능)
작업 제어
- 포그라운드 작업을 백그라운드 작업으로 전환하거나 백그라운드 작업을 포그라운드 작업으로 전환하는 제어를 의미
- 작업 제어는 작업 전환과 작업의 일시 중지, 작업 종료로 구분되어 수행됨
- jobs 명령: 현재 실행중인 작업 목록 출력 (멈춰있는 작업도 포함)
jobs [%작업 번호] : 작업 목록 출력
%작업 번호
%번호 : 해당 작업의 정보만 출력
%+ 또는 %% : 작업순서가 +인 작업 정보를 출력
%- : 작업순서가 -인 작업 정보를 출력
sleep 20&
sleep 30&
sleep 10
jobs (포그라운드 작업은 목록에 보이지 않음)
작업 전환
- 현재 포그라운드로 실행 중인 작업을 백그라운드 작업으로 전환하거나 백그라운드 작업을 포그라운드로 전환
명령 의미
| 명령 | 의미 |
| Ctrl+Z 또는 stop [%작업 번호] | 포그라운드 작업을 잠시 중단 |
| bg [%작업 번호] | 작업 번호가 지시하는 작업을 백그라운드 전환 |
| fg [%작업 번호] | 작업 번호가 지시하는 작업을 포그라운드 전환 |
sleep 100
Ctrl+Z 눌러 일시 중단
bg %1 : 백그라운드로 작업 전환
cf. bg 명령만 사용할 경우 작업순서가 +인 작업에 대해서만 적용됨
jobs
→ sleep 100이 sleep 100&로 전환되어 작업 목록에 보이게 됨
포그라운드 작업 종료 : Ctrl+C (Ctrl+Z는 작업 일시 중지)
- 포그라운드 작업은 Ctrl+C를 누르면 대부분 종료
- 또다른 방법은 해당 프로세스의 PID를 찾아서 강제 종료
Ctrl+C를 눌러 현재 수행 중인 포그라운드 작업을 강제로 종료하고 jobs 명령으로 작업 목록을 확인해보면 수행 중인 작업이 없는 것을 알 수 있음
백그라운드 작업 종료 : kill
- kill 명령을 사용하여 강제 종료
- 인자는 PID 대신 ‘%작업 번호’ 를 선언해도 됨
kill PID 또는 kill %작업 번호
문제 10-02
- 터미널 창에서 gedit 명령 수행하기
- 실행 중인 gedit를 정지된 작업으로 만들기
- 터미널 창에서 수행 중인 백그라운드 작업 목록 확인하기
- 정지 중인 백그라운드 작업을 포그라운드 작업으로 전환하기
- 단축키를 사용하여 수행 중인 포그라운드 작업 강제 종료하기
- 현재 수행 중인 작업 목록 출력하기
$ gedit
$ Ctrl+Z 누르기
$ jobs
$ fg %1
$ Ctrl+C 누르기
$ jobs'공부 기록 > 리눅스 기초' 카테고리의 다른 글
| [리눅스 기초] 11 소프트웨어 관리 (1) | 2026.01.17 |
|---|---|
| [리눅스 기초] 10 프로세스 관리 (0) | 2026.01.17 |
| [리눅스 기초] 08 관리자 권한 실행 (0) | 2025.11.03 |
| [리눅스 기초] 07 파일 접근 권한 설정 (0) | 2025.11.02 |
| [리눅스 기초] 06 우분투 에디터 (0) | 2025.11.02 |