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

정리

pstop으로 프로세스 검사, nicerenice로 우선순위 조정, killpkill로 시그널 전송, 백그라운드 작업 관리, lsof로 파일 검사하는 Linux 프로세스 진단 및 관리 기술을 다뤘습니다.