44. Diagnose and Manage Processes
개요
모든 실행 명령은 완료되거나 수동으로 종료될 때까지 실행되는 프로세스를 생성합니다. ls와 같은 단기 프로세스는 결과를 표시하고 종료되는 반면, SSH 데몬과 같은 서비스는 백그라운드에서 지속적으로 실행됩니다.
ps 명령어 사용
ps 명령어는 활성 프로세스를 검사하는 기본 도구입니다. 옵션 없이 실행하면 현재 터미널 세션과 연관된 프로세스만 표시됩니다. 모든 시스템 프로세스를 보려면:
ps aux
ax: 모든 제어 터미널의 프로세스 목록u: 메모리 및 CPU 사용량 열이 포함된 사용자 지향 형식
ps aux 출력 컬럼
| 컬럼 | 설명 |
|---|---|
%CPU | 프로세스가 사용하는 CPU 코어 용량의 백분율 |
%MEM | 프로세스가 사용하는 시스템 총 메모리의 백분율 |
START | 프로세스가 시작된 시간 또는 날짜 |
TIME | 프로세스가 소비한 총 CPU 시간 |
COMMAND | 프로세스를 시작한 명령어와 파라미터 |
커널 프로세스는 대괄호 안에 표시됩니다 (예: [kthreadd]).
프로세스 필터링
PID로 특정 프로세스 상세 정보 확인:
ps 1
ps u 1
특정 사용자가 시작한 프로세스 목록:
ps u -U username
이름으로 프로세스 검색:
pgrep -a processname
top으로 실시간 프로세스 모니터링
top 명령어는 CPU 사용량 순으로 프로세스를 정렬하여 실시간으로 업데이트합니다. 화살표 키로 탐색하고, "Q"를 눌러 종료합니다.
Niceness와 renice로 프로세스 우선순위 조정
| Nice 값 | 우선순위 | 설명 |
|---|---|---|
-20 | 🔴 최고 (Highest) | CPU를 가장 많이 점유, root만 설정 가능 |
-1 ~ -19 | 🟠 높음 (High) | 일반보다 우선, root만 설정 가능 |
0 | 🟡 기본 (Default) | 아무 옵션 없이 실행 시 기본값 |
1 ~ 18 | 🟢 낮음 (Low) | 다른 프로세스에 양보, 일반 유저 설정 가능 |
19 | 🔵 최저 (Lowest) | CPU를 가장 적게 점유, 일반 유저 설정 가능 |
특정 niceness로 프로세스 실행:
nice -n [NICE VALUE] [COMMAND]
| 파라미터 | 설명 | 예시 |
|---|---|---|
[NICE VALUE] | 설정할 niceness 값 (-20 ~ 19). 생략 시 기본값 10 적용 | -n 11 |
[COMMAND] | 해당 우선순위로 실행할 명령어 | bash, tar, python script.py |
# 예시: niceness 11로 bash 실행
nice -n 11 bash
niceness 값 확인 (NI):
ps l
# ps lax - we can see all process
# ps laxf - tree view (parent → children)
| 옵션 | 설명 |
|---|---|
l | long format (NI 컬럼 포함) |
ax | 모든 프로세스 표시 |
f | 트리 구조로 부모-자식 관계 표시 |
ps fax
# ps lax
터미널을 열면 부모 bash가 실행됩니다.
거기서 nice -n 11 bash를 입력하면 새로운 bash 프로세스가 생성되는데,
이것이 자식 bash입니다.
bash (PID 1000) ← 부모: 내가 터미널에서 사용하는 쉘
└── bash (PID 1001) ← 자식: nice -n 11 bash 로 실행한 새 쉘즉, 같은 프로그램이라도 새로 실행하면 별개의 프로세스가 됩니다. 부모 bash에서 명령어를 실행하면, 그 명령어는 항상 자식 프로세스로 생성됩니다.
실행 중인 프로세스의 niceness 수정:
renice 7 12238
프로세스에 시그널 전송
Linux 시그널은 프로세스에게 중지, 일시 중단, 종료 등의 작업을 수행하도록 지시합니다.
시그널을 보낸다고 해서 애플리케이션이 항상 듣는 것은 아닙니다. 프로세스는 대부분의 시그널을 무시(ignore)하거나 직접 처리(handle) 할 수 있습니다.
단, 아래 두 시그널은 커널이 강제로 처리하며 프로세스가 절대 무시할 수 없습니다:
시그널 번호 설명 SIGKILL9 즉시 강제 종료 — 프로세스가 막을 수 없음 SIGSTOP19 즉시 강제 일시 중단 — 프로세스가 막을 수 없음 나머지 시그널 (예:
SIGTERM,SIGHUP)은 애플리케이션 이 받을지 말지, 어떻게 반응할지 코드로 정의할 수 있습니다.
사용 가능한 시그널 목록:
kill -l
시그널 전송:
sudo kill -s SIGHUP 1457
# sshd PID is 1457 as example
강제 종료 (SIGKILL):
kill -9 PID
프로세스 이름으로 시그널 전송:
pkill -KILL bash
백그라운드/포그라운드 프로세스 관리
백그라운드에서 작업 실행:
sleep 300 &
백그라운드 프로세스 확인:
jobs
포그라운드 프로세스를 CTRL-Z로 일시 중단 후, 다시 포그라운드로 가져오기:
fg
lsof로 열린 파일 확인
프로세스가 사용 중인 파일 검사:
lsof -p PID
상승된 권한이 필요한 경우:
sudo lsof /var/log/auth.log
정리
ps와 top으로 프로세스 검사, nice와 renice로 우선순위 조정, kill과 pkill로 시그널 전송, 백그라운드 작업 관리, lsof로 파일 검사하는 Linux 프로세스 진단 및 관리 기술을 다뤘습니다.