Aller au contenu principal

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)
옵션설명
llong format (NI 컬럼 포함)
ax모든 프로세스 표시
f트리 구조로 부모-자식 관계 표시
ps fax
# ps lax
💡 bash가 bash의 자식인 이유

터미널을 열면 부모 bash가 실행됩니다. 거기서 nice -n 11 bash를 입력하면 새로운 bash 프로세스가 생성되는데, 이것이 자식 bash입니다.

bash (PID 1000)        ← 부모: 내가 터미널에서 사용하는 쉘
└── bash (PID 1001) ← 자식: nice -n 11 bash 로 실행한 새 쉘

즉, 같은 프로그램이라도 새로 실행하면 별개의 프로세스가 됩니다. 부모 bash에서 명령어를 실행하면, 그 명령어는 항상 자식 프로세스로 생성됩니다.

실행 중인 프로세스의 niceness 수정:

renice 7 12238
"슈퍼유저만 프로세스의 nice 값을 낮출 수 있습니다(즉, 우선순위를 높일 수 있음)."

프로세스에 시그널 전송​

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 프로세스 진단 및 관리 기술을 다뤘습니다.