리눅스 시스템에서 프로세스란, 프로그램의 시행단위를 말한다. 각각의 프로세스는 자체적인 메모리 공간을 가지며, 이를 통해 자신의 코드를 실행하고 데이터를 저장한다. 각 프로세스는 고유의 프로세스 ID (PID)를 갖게 되며, 이는 시스템 내에서 프로세스를 구분하고 관리하는 데 사용된다. 시스템 엔지니어로서 프로세스 관리는 시스템의 안정성과 효율성을 유지하기 위해 꼭 필요한 작업이다. 각 프로세스가 시스템 자원을 어떻게 사용하고 있는지 알아야 적절하게 할당하고, 필요 없는 프로세스를 종료함으로써 시스템의 성능을 최적화할 수 있다. 리눅스 시스템에서 프로세스를 모니터링하는 명령어 중 가장 널리 사용하는 ps라는 명령어다. ps 명령어는 현재 시스템에서 실행 중인 프로세스의 상태를 보여주는 데 사용되는 도구로, 이를 통해 시스템의 상태를 파악하고 관리할 수 있다.
[목차]
1. ps 명령어 기본 사용법
ps 명령어는 process status 의 약자로, 현재 시스템에서 동작 중인 프로세스들의 상태를 보여주는 명령어다.
# ps
PID TTY TIME CMD
21037 pts/0 00:00:00 bash
21052 pts/0 00:00:00 ps
항목 내용
- PID: 프로세스 ID
- TTY: 프로세스가 연결된 터미널
- TIME: CPU 사용 시간
- CMD: 실행된 명령어를 나타 낸다.
2. ps 주요 옵션
- -e, --every: 시스템의 모든 프로세스를 보여줌.
- -f 혹은 --full: 프로세스에 대한 전체 정보를 보여줌.
- -u 혹은 --user: 사용자를 기준으로 프로세스를 보여줌. (특정 사용자의 프로세스만 확인)
- -A 혹은 --all: 모든 프로세스를 보여줌.
- -x : 터미널에 연결되지 않은 프로세스도 보여줌.
- -eF : 시스템의 모든 프로세스에 대한 전체 정보를 보여줌.
- -l : 프로세스의 자세한 정보를 보여줌.
- -p 혹은 --pid: 특정 PID를 가진 프로세스의 정보를 보여줌.
- -o : 원하는 정보만을 출력하도록 커스텀. 이때, 출력할 정보를 옵션 뒤에 공백으로 구분해 작성함.
3. 옵션 조합 및 출력 예제
원하는 프로세스에 대한 항목만 출력
# ps -o pid,uname,comm
PID USER COMMAND
21037 root bash
21140 root ps
원하는 프로세스의 PID 값만 출력
# ps -p 18527
PID TTY TIME CMD
18527 ? 00:00:14 httpd
프로세스 상세 정보와 모든 프로세스 정보 출력
# ps -ef
UID PID PPID C STIME TTY TIME CMD
~ 생략
root 1 0 0 Jun28 ? 00:00:14 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 630 1 0 Jun28 ? 00:00:00 /sbin/auditd
root 653 1 0 Jun28 ? 00:00:19 /usr/sbin/irqbalance --foreground
polkitd 655 1 0 Jun28 ? 00:00:00 /usr/lib/polkit-1/polkitd --no-debug
root 657 1 0 Jun28 ? 00:00:04 /usr/lib/systemd/systemd-logind
dbus 658 1 0 Jun28 ? 00:00:08 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 18527 1 0 Jul05 ? 00:00:14 /usr/sbin/httpd -DFOREGROUND
root 19509 2 0 Jul07 ? 00:00:00 [kworker/5:2]
apache 20372 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20374 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20375 18527 0 Jul09 ? 00:00:03 /usr/sbin/httpd -DFOREGROUND
apache 20376 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20457 18527 0 Jul09 ? 00:00:04 /usr/sbin/httpd -DFOREGROUND
apache 20458 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20459 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20462 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20463 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
root 20644 2 0 Jul09 ? 00:00:00 [kworker/3:0]
root 20676 2 0 Jul09 ? 00:00:00 [kworker/1:0]
apache 20711 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
root 21035 891 0 13:58 ? 00:00:00 sshd: root@pts/0
root 21037 21035 0 13:58 pts/0 00:00:00 -bash
root 21091 21037 0 14:13 pts/0 00:00:00 ps -ef
apache 유저의 프로세스만 확인
# ps -f -u apache
UID PID PPID C STIME TTY TIME CMD
apache 20372 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20374 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20375 18527 0 Jul09 ? 00:00:03 /usr/sbin/httpd -DFOREGROUND
apache 20376 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20457 18527 0 Jul09 ? 00:00:04 /usr/sbin/httpd -DFOREGROUND
apache 20458 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20459 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20462 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20463 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
apache 20711 18527 0 Jul09 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND
시스템에서 실행 중인 모든 프로세스를 상세하게 출력
# ps aux
~생략
root 503 0.0 0.0 39428 5040 ? Ss Jun28 0:01 /usr/lib/systemd/systemd-journald
root 508 0.0 0.0 0 0 ? S< Jun28 0:00 [kworker/1:1H]
root 525 0.0 0.0 190376 1324 ? Ss Jun28 0:00 /usr/sbin/lvmetad -f
root 535 0.0 0.0 45676 2044 ? Ss Jun28 0:00 /usr/lib/systemd/systemd-udevd
root 611 0.0 0.0 0 0 ? S Jun28 0:00 [jbd2/vda1-8]
root 612 0.0 0.0 0 0 ? S< Jun28 0:00 [ext4-rsv-conver]
root 630 0.0 0.0 55532 844 ? S<sl Jun28 0:00 /sbin/auditd
root 653 0.0 0.0 21608 1236 ? Ss Jun28 0:19 /usr/sbin/irqbalance --foreground
polkitd 655 0.0 0.2 612340 12264 ? Ssl Jun28 0:00 /usr/lib/polkit-1/polkitd --no-debug
root 657 0.0 0.0 26384 1648 ? Ss Jun28 0:04 /usr/lib/systemd/systemd-logind
dbus 658 0.0 0.0 58116 2308 ? Ss Jun28 0:08 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 664 0.0 0.0 126392 1564 ? Ss Jun28 0:00 /usr/sbin/crond -n
root 685 0.0 0.0 110208 828 tty1 Ss+ Jun28 0:00 /sbin/agetty --noclear tty1 linux
root 891 0.0 0.0 113000 4296 ? Ss Jun28 0:00 /usr/sbin/sshd -D
root 893 0.0 0.2 574284 17344 ? Ssl Jun28 1:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 894 0.0 0.0 216400 5036 ? Ssl Jun28 0:35 /usr/sbin/rsyslogd -n
root 896 0.1 0.2 608932 16908 ? Ssl Jun28 25:00 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start
root 1148 0.0 0.0 0 0 ? S Jun28 0:01 [kworker/0:2]
mysql 1395 0.0 5.1 1753872 312504 ? Ssl Jun28 2:38 /usr/sbin/mariadbd
root 13155 0.0 0.0 0 0 ? S Jul03 0:03 [kworker/1:1]
root 14301 0.0 0.0 0 0 ? S Jul03 0:00 [kworker/2:0]
root 18527 0.0 0.2 434292 17872 ? Ss Jul05 0:14 /usr/sbin/httpd -DFOREGROUND
root 19509 0.0 0.0 0 0 ? R Jul07 0:00 [kworker/5:2]
root 20018 0.0 0.0 0 0 ? S Jul08 0:00 [kworker/5:0]
apache 20372 0.0 0.3 549636 24408 ? S Jul09 0:02 /usr/sbin/httpd -DFOREGROUND
apache 20374 0.0 0.3 546772 21928 ? S Jul09 0:02 /usr/sbin/httpd -DFOREGROUND
apache 20375 0.0 0.3 549636 24420 ? S Jul09 0:03 /usr/sbin/httpd -DFOREGROUND
apache 20376 0.0 0.3 549636 24408 ? S Jul09 0:02 /usr/sbin/httpd -DFOREGROUND
apache 20457 0.0 0.2 542708 17864 ? S Jul09 0:04 /usr/sbin/httpd -DFOREGROUND
apache 20458 0.0 0.3 547532 22688 ? S Jul09 0:02 /usr/sbin/httpd -DFOREGROUND
apache 20459 0.0 0.3 547332 22568 ? S Jul09 0:02 /usr/sbin/httpd -DFOREGROUND
apache 20462 0.0 0.3 549092 23988 ? S Jul09 0:02 /usr/sbin/httpd -DFOREGROUND
apache 20463 0.0 0.3 549592 24400 ? S Jul09 0:02 /usr/sbin/httpd -DFOREGROUND
root 20644 0.0 0.0 0 0 ? S Jul09 0:00 [kworker/3:0]
root 20676 0.0 0.0 0 0 ? S Jul09 0:00 [kworker/1:0]
apache 20711 0.0 0.3 549608 24404 ? S Jul09 0:02 /usr/sbin/httpd -DFOREGROUND
root 20785 0.0 0.0 0 0 ? S Jul09 0:00 [kworker/3:2]
root 21035 0.0 0.1 159740 6436 ? Ds 13:58 0:00 sshd: root@pts/0
root 21037 0.0 0.0 115684 2096 pts/0 Ss 13:58 0:00 -bash
root 21098 0.0 0.0 0 0 ? S 14:16 0:00 [kworker/2:1]
root 21134 0.0 0.0 155452 1824 pts/0 R+ 14:16 0:00 ps aux
프로세스는 운영체제에서 프로그램의 실행 단위를 의미하며, 어떤 작업이 진행 중인지, 어떤 리소스를 사용하고 있는지 등을 파악하는 것은 시스템 엔지니어로서 중요한 작업이다. 시스템에 부하나 성능 저하가 발생되었을 때는 top 명령어를 통해 리소스를 많이 사용하는 프로세스나 부하를 주는 프로세스를 확인하고 ps 명령어를 통해 부모 프로세스 등을 확인해 동작 중인 상태를 파악하는 방식으로 진행하고 조치가 된다면 시스템 관리에 많은 도움이 될 수 있다.