사용자 정보를 함께 출력하는 리눅스의 ps 명령어 사용 방법
기본적으로 ps 명령어는 현재 프로세스 (대개의 경우 명령행이므로 bash shell)에 대한 현황만을 보여줍니다.
$ ps
PID TTY TIME CMD
2232 pts/0 00:00:00 bash
3954 pts/0 00:00:00 ps
위에서 ps가 나오는 것은 아마도 bash 프로세스 및 그것의 fork 프로세스까지 보여주기 때문인 듯합니다. 이에 더해 사용자 계정 정보도 기본적으로는 -u 옵션으로 간단하게 해결할 수 있습니다.
$ ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
tster 2232 0.0 0.0 12172 5612 pts/0 Ss 15:44 0:00 /bin/bash
tster 3982 0.0 0.0 12784 3584 pts/0 R+ 22:35 0:00 ps -u
그런데, 사실 대개의 경우 ps 명령어를 현재 시스템에 특정 프로세스가 떠 있는지 확인하려는 용도로 많이 사용할텐데요, 예를 들어 dockerd가 실행되어 있는지 확인하기 위해 "-A" 옵션을 주면 이때부터는 -u 옵션이,
$ ps -Au
error: list of users must follow -u
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
사용자를 명시해야 하는 걸로 바뀝니다. 즉, root 사용자가 실행한 프로세스 목록을 확인하려고 하는 등의 목적으로,
$ ps -A -u root
쓸 수 있을 뿐, 특정 프로세스의 사용자 목록을 확인하는 용도로 사용할 수 없습니다. 잘은 모르지만 이럴 때는 -o 옵션으로,
finding systemd unit 'owning' a running daemon process
; https://unix.stackexchange.com/questions/225802/finding-systemd-unit-owning-a-running-daemon-process
출력 칼럼을 선택하는 식으로 처리해야 합니다.
$ ps -A -o 'user,cmd'
USER CMD
root /sbin/init splash
root [kthreadd]
root [rcu_gp]
root [rcu_par_gp]
root [kworker/0:0H-kblockd]
...[생략]...
또한 grep을 이용해 특정 프로세스에 대한 필터링 조건으로 사용할 수 있고,
$ ps -A -o 'user,cmd' | grep dockerd
root dockerd --group docker --exec-root=/var/snap/docker/471/run/docker --data-root=/var/snap/docker/common/var-lib-docker --pidfile=/var/snap/docker/471/run/docker.pid --config-file=/var/snap/docker/471/config/daemon.json
tster grep --color=auto dockerd
또는 grep의 인자에 마이너스(-) 기호 등의 escape가 필요한 경우에는 요런 식으로 실행할 수 있습니다.
$ ps -A -o 'user,cmd' | grep '\-\-'
message+ /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root /usr/sbin/NetworkManager --no-daemon
root /usr/sbin/irqbalance --foreground
root /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root /usr/lib/policykit-1/polkitd --no-debug
root /usr/sbin/ModemManager --filter-policy=strict
root dockerd --group docker --exec-root=/var/snap/docker/471/run/docker --data-root=/var/snap/docker/common/var-lib-docker --pidfile=/var/snap/docker/471/run/docker.pid --config-file=/var/snap/docker/471/config/daemon.json
root /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
kernoops /usr/sbin/kerneloops --test
...[생략]...
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]