소개
프로세스 관리는 Linux 시스템 관리의 기본적인 측면입니다. Linux 에서 실행하는 모든 프로그램 또는 명령은 프로세스를 생성하며, 이러한 프로세스를 모니터링하는 것은 시스템 성능을 유지하고 문제를 해결하는 데 필수적입니다.
이 랩에서는 Linux 시스템에서 실행 중인 프로세스를 모니터링하고 관리하기 위한 강력한 도구인 ps 명령어를 마스터하는 방법을 안내합니다. ps 명령어와 다양한 옵션을 사용하는 방법을 이해함으로써, 언제든지 시스템에서 무슨 일이 일어나고 있는지에 대한 귀중한 통찰력을 얻을 수 있습니다.
이 랩을 통해 다양한 형식으로 프로세스를 표시하고, 모든 시스템 프로세스를 보고, ps가 각 프로세스에 대해 제공할 수 있는 자세한 정보를 이해하는 방법을 배우게 됩니다.
기본 프로세스 정보 이해
Linux 에서 실행 중인 모든 프로그램 또는 명령은 프로세스로 표현됩니다. 각 프로세스에는 PID (Process ID, 프로세스 ID) 라고 하는 고유 식별자가 있습니다. ps 명령어를 사용하면 이러한 프로세스를 보고 해당 프로세스에 대한 정보를 얻을 수 있습니다.
ps 명령어의 기본 사용법을 살펴보겠습니다.
기본 ps 명령어
LabEx 환경에서 터미널을 엽니다.
~/project디렉토리에서 시작해야 합니다.다음 명령을 입력하고 Enter 키를 누릅니다.
ps
- 다음과 유사한 출력을 볼 수 있습니다.
PID TTY TIME CMD
188 pts/0 00:00:00 zsh
449 pts/0 00:00:00 ps
이 출력의 의미를 이해해 보겠습니다.
PID: 프로세스 ID, 각 프로세스에 할당된 고유 번호TTY: 터미널 유형, 프로세스가 실행 중인 터미널을 나타냄TIME: 프로세스가 사용한 CPU 시간의 양CMD: 프로세스를 시작한 명령어
이 예제에서는 다음을 볼 수 있습니다.
zsh셸 프로세스 (현재 터미널 세션)- 방금 실행한
ps명령어
기본 ps 명령어는 현재 터미널 세션과 관련된 프로세스만 표시합니다. 이는 최근에 실행한 명령을 빠르게 확인하는 데 유용하지만, 시스템에서 무슨 일이 일어나고 있는지에 대한 전체적인 그림을 제공하지는 않습니다.
다른 명령을 실행한 다음 ps를 다시 실행하여 출력이 어떻게 변경되는지 확인해 보십시오.
echo "Hello, world"
ps
echo 명령어가 프로세스 목록에 나타나지 않는 것을 알 수 있습니다. 이는 echo가 너무 빨리 시작하고 종료되어 ps 명령어를 실행했을 때는 더 이상 실행 중이지 않았기 때문입니다.
모든 시스템 프로세스 보기
이전 단계에서 기본 ps 명령어는 현재 터미널과 관련된 프로세스만 표시한다는 것을 배웠습니다. 그러나 일반적인 Linux 시스템에는 동시에 많은 프로세스가 실행되고 있으며, 대부분은 터미널 세션과 직접 관련이 없습니다.
시스템에서 무슨 일이 일어나고 있는지에 대한 더 완전한 그림을 얻으려면 ps 명령어와 함께 -e 옵션을 사용할 수 있습니다.
ps -e 를 사용하여 모든 프로세스 보기
- 터미널에서 다음 명령을 입력하고 Enter 키를 누릅니다.
ps -e
- 다음과 유사한 훨씬 더 긴 프로세스 목록을 볼 수 있습니다.
PID TTY TIME CMD
1 ? 00:00:00 init.sh
22 ? 00:00:00 supervisord
23 ? 00:00:00 sshd
32 ? 00:00:00 dbus-daemon
35 ? 00:00:00 xfce4-session
···
이 출력은 터미널과 관련된 프로세스뿐만 아니라 시스템에서 실행 중인 모든 프로세스를 보여줍니다. 많은 프로세스가 TTY 열에 ?를 가지고 있음을 알 수 있습니다. 이는 이러한 프로세스가 어떤 터미널과도 관련이 없음을 나타냅니다.
시스템 프로세스 이해
보이는 프로세스 중 상당수는 백그라운드에서 실행되는 시스템 서비스입니다. 예를 들어:
init.sh(PID 1) 는 시스템 부팅 시 시작되는 첫 번째 프로세스입니다.supervisord는 프로세스 제어 시스템입니다.sshd는 SSH 서버 데몬입니다.dbus-daemon은 D-Bus 메시지 버스 데몬입니다.xfce4-session은 Xfce 데스크톱 환경의 일부입니다.
이러한 프로세스는 다양한 시스템 기능을 처리하고 Linux 시스템을 사용할 수 있도록 하는 서비스를 제공합니다.
프로세스 수 계산
현재 시스템에서 실행 중인 프로세스 수를 알고 싶다면 ps -e의 출력을 wc 명령어로 파이프할 수 있습니다.
ps -e | wc -l
표시된 숫자는 시스템에서 실행 중인 총 프로세스 수와 헤더에 대한 한 줄을 나타냅니다.
상세 프로세스 정보 표시
이제 시스템에서 실행 중인 모든 프로세스를 볼 수 있으므로 각 프로세스에 대한 더 자세한 정보를 얻는 방법을 알아보겠습니다. ps 명령어의 -f 옵션은 추가 세부 정보가 포함된 "전체 형식" 목록을 제공합니다.
ps -ef 를 사용하여 상세 정보 얻기
- 터미널에서 다음 명령을 입력하고 Enter 키를 누릅니다.
ps -ef
- 다음과 유사한 출력을 볼 수 있습니다.
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:45 ? 00:00:00 /bin/bash /etc/shiyanlou/sbin/init.sh
root 22 1 0 16:45 ? 00:00:00 /usr/bin/python3 /usr/bin/supervisord -n
root 23 22 0 16:45 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
labex 188 187 0 16:46 pts/0 00:00:00 -zsh
labex 677 188 0 16:55 pts/0 00:00:00 ps -ef
이 형식은 각 프로세스에 대한 훨씬 더 자세한 정보를 제공합니다.
UID: 프로세스 소유자의 사용자 IDPID: 프로세스 IDPPID: 상위 프로세스 ID (이 프로세스를 시작한 프로세스)C: CPU 사용률STIME: 프로세스 시작 시간TTY: 프로세스와 관련된 터미널TIME: 프로세스에서 사용한 CPU 시간CMD: 인수와 함께 전체 명령
프로세스 관계 이해
PPID 열은 프로세스가 서로 어떻게 관련되어 있는지 이해하는 데 특히 유용합니다. (가장 첫 번째 프로세스를 제외한) 모든 프로세스는 다른 프로세스에 의해 시작되어 부모 - 자식 관계를 만듭니다.
예를 들어, 위의 출력에서:
- PID 1 (init.sh) 을 가진 프로세스는 PPID 가 0 입니다 (첫 번째 프로세스임).
- PID 22 (supervisord) 를 가진 프로세스는 PPID 가 1 입니다 (init.sh 에 의해 시작됨).
- PID 23 (sshd) 를 가진 프로세스는 PPID 가 22 입니다 (supervisord 에 의해 시작됨).
이 계층적 관계는 "프로세스 트리"를 형성하며, pstree와 같은 특수 도구를 사용하여 시각화할 수 있습니다 (이 랩에서는 다루지 않음).
프로세스 정보 필터링
ps와 grep을 결합하여 특정 프로세스를 필터링할 수 있습니다. 예를 들어, zsh 셸과 관련된 모든 프로세스를 찾으려면:
ps -ef | grep zsh
이렇게 하면 명령 이름에 "zsh"가 있는 모든 프로세스가 표시됩니다.
시스템에서 다른 프로세스를 검색해 보십시오.
ps -ef | grep bash
ps와 필터링 도구의 이러한 조합은 시스템 모니터링 및 문제 해결을 위한 강력한 명령어가 됩니다.
프로세스 정보 정렬 및 고급 옵션
이제 기본 프로세스 정보와 상세 목록에 대해 배웠으므로 ps 명령어를 더욱 유용하게 만드는 몇 가지 추가 옵션을 살펴보겠습니다.
ps 를 사용한 사용자 정의 형식
ps 명령어를 사용하면 관심 있는 특정 정보로 사용자 정의 출력을 만들 수 있습니다. -o 옵션을 사용하면 표시할 열을 지정할 수 있습니다.
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu
이 명령어는 다음을 표시합니다.
- 프로세스 ID (pid)
- 상위 프로세스 ID (ppid)
- 명령 (cmd)
- CPU 사용률 (%cpu)
- 메모리 사용률 (%mem)
--sort=-%cpu 매개변수는 CPU 사용률을 기준으로 내림차순으로 프로세스를 정렬합니다 (%cpu 앞의 마이너스 기호는 내림차순을 나타냅니다).
다음과 유사한 출력을 볼 수 있습니다.
PID PPID CMD %CPU %MEM
789 788 ps -eo pid,ppid,cmd,%cpu,% 0.0 0.1
188 187 -zsh 0.0 0.1
35 34 xfce4-session 0.0 0.2
32 1 /usr/bin/dbus-daemon --sys 0.0 0.0
23 22 sshd: /usr/sbin/sshd -D [l 0.0 0.1
22 1 /usr/bin/python3 /usr/bin/ 0.0 0.2
1 0 /bin/bash /etc/shiyanlou/s 0.0 0.0
메모리 집약적 프로세스 찾기
가장 많은 메모리를 사용하는 프로세스를 식별하려면 메모리 사용량을 기준으로 정렬할 수 있습니다.
ps -eo pid,user,cmd,%mem --sort=-%mem | head -n 6
이 명령어는 PID, 사용자, 명령 및 메모리 사용률과 함께 상위 5 개 메모리 소비 프로세스 (헤더 라인 포함) 를 표시합니다.
프로세스 상태 이해
프로세스는 서로 다른 상태에 있을 수 있습니다. 이 정보를 살펴보겠습니다.
ps -eo pid,stat,cmd
STAT 열은 단일 문자 코드를 사용하여 프로세스 상태를 표시합니다.
R: 실행 중 또는 실행 가능S: 인터럽트 가능한 대기 상태로 절전 중D: 인터럽트 불가능한 절전 (일반적으로 IO)Z: 좀비 프로세스T: 중지됨 또는 추적 중
상태 문자 뒤에 추가 문자가 나타날 수 있습니다.
<: 높은 우선순위N: 낮은 우선순위s: 세션 리더+: 전경 프로세스 그룹에 있음
이 정보는 주어진 순간에 프로세스가 무엇을 하고 있는지 이해하는 데 도움이 됩니다.
pstree 를 사용한 계층적 보기
ps 명령어 자체의 일부는 아니지만 pstree 명령어는 프로세스 계층 구조를 시각적으로 표현합니다.
pstree
이것은 프로세스 간의 관계를 트리 형식으로 표시하여 프로세스가 서로 어떻게 관련되어 있는지 더 쉽게 이해할 수 있도록 합니다.
실시간 프로세스 모니터링
ps 명령어가 특정 시점의 프로세스 스냅샷을 제공하는 반면, 때로는 프로세스를 지속적으로 모니터링해야 합니다. 이 단계에서는 실시간 프로세스 모니터링을 위한 도구를 살펴보겠습니다.
top 명령어 사용
top 명령어는 실행 중인 시스템의 동적 실시간 보기를 제공합니다. 시스템 요약 정보와 함께 현재 Linux 커널에서 관리하는 프로세스 또는 스레드 목록을 표시합니다.
다음 명령을 실행합니다.
top
다음과 유사한 내용을 볼 수 있습니다.
top - 17:15:23 up 30 min, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 31 total, 1 running, 30 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1975.1 total, 1558.7 free, 180.4 used, 236.1 buff/cache
MiB Swap: 975.0 total, 975.0 free, 0.0 used. 1651.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 8988 3208 2556 S 0.0 0.2 0:00.07 init.sh
22 root 20 0 39528 8596 6088 S 0.0 0.4 0:00.20 supervisord
23 root 20 0 12128 6788 5864 S 0.0 0.3 0:00.00 sshd
...
출력은 두 부분으로 나뉩니다.
- 시스템 요약 (상위 5 개 줄)
- 프로세스 목록 (기본적으로 CPU 사용량별로 정렬됨)
top을 종료하려면 q 키를 누릅니다.
top 출력 이해
시스템 요약은 다음을 제공합니다.
- 가동 시간 및 부하 평균
- 상태별 작업 수 (실행 중, 절전 중, 중지됨, 좀비)
- CPU 사용량 분석
- 메모리 및 스왑 사용량
프로세스 목록은 다음을 표시합니다.
- PID: 프로세스 ID
- USER: 사용자 소유자
- PR: 우선순위 (Priority)
- NI: Nice 값
- VIRT: 사용된 가상 메모리
- RES: 사용된 상주 메모리
- SHR: 공유 메모리
- S: 프로세스 상태
- %CPU: CPU 사용량
- %MEM: 메모리 사용량
- TIME+: 사용된 CPU 시간
- COMMAND: 명령 이름
top 의 대화형 명령어
top이 실행되는 동안 다양한 키보드 명령을 사용하여 상호 작용할 수 있습니다.
- 메모리 사용량별로 정렬하려면
M을 누릅니다. - CPU 사용량별로 정렬하려면
P를 누릅니다. - 프로세스를 종료하려면 PID 다음에
k를 누릅니다. - 도움말을 보려면
h를 누릅니다.
top 을 실행하는 동안 M을 눌러 메모리 사용량별로 정렬된 프로세스를 확인해 보십시오.
ps 와 함께 watch 명령어 사용
실시간 모니터링에 대한 또 다른 접근 방식은 ps와 함께 watch 명령어를 사용하는 것입니다. 이 명령어는 명령을 주기적으로 실행하고 출력을 표시하여 시간이 지남에 따라 변경 사항을 볼 수 있도록 합니다.
watch -n 1 'ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 6'
이것은 1 초마다 새로 고쳐지고 상위 5 개 CPU 소비 프로세스를 표시합니다.
watch에서 종료하려면 Ctrl+C를 누릅니다.
ps와 watch와 같은 유틸리티를 결합하면 시스템의 프로세스를 실시간으로 모니터링할 수 있는 강력한 기능을 얻을 수 있습니다.
요약
이 Lab 을 통해 ps 명령어 및 관련 도구를 사용하여 Linux 시스템에서 프로세스를 모니터링하고 관리하는 데 필요한 필수 기술을 배웠습니다. 다음은 지금까지 다룬 내용에 대한 요약입니다.
기본 프로세스 정보: 현재 터미널 세션과 관련된 프로세스를 보기 위해 기본
ps명령어를 사용하는 방법을 배웠으며, PID, TTY, TIME 및 CMD 를 포함한 기본 출력 형식을 이해했습니다.시스템 전체 프로세스 보기: 터미널과 관련된 프로세스뿐만 아니라 시스템에서 실행 중인 모든 프로세스를 보기 위해
ps -e를 사용하는 방법을 익혔습니다.상세 프로세스 정보: 사용자 ID, 상위 프로세스 ID, 시작 시간 및 전체 명령줄을 포함하여 프로세스에 대한 자세한 정보를 얻기 위해
ps -ef명령어를 살펴보았습니다.고급 정렬 및 형식 지정:
ps -eo및--sort매개변수를 사용하여 특정 열과 정렬 옵션으로 사용자 정의 출력을 만드는 방법을 배웠습니다.실시간 모니터링: 동적 실시간 프로세스 보기를 위해
top명령어를 사용하는 방법과 지속적인 모니터링을 위해ps를watch와 같은 다른 유틸리티와 결합하는 방법을 배웠습니다.
이러한 기술은 Linux 환경에서 시스템 관리, 문제 해결 및 성능 모니터링에 필수적입니다. 어떤 프로세스가 실행 중이며 시스템 리소스를 어떻게 소비하는지 이해하는 것은 시스템 상태를 유지하고 문제를 진단하는 데 필수적입니다.
Linux 시스템으로 계속 작업하면서 프로세스를 효과적으로 모니터링하고 관리하는 능력은 가장 가치 있는 기술 중 하나가 될 것입니다.



