Você que utiliza o Linux já deve conhecer o Comando PS, até porque ele é um dos mais básicos comandos do Linux. O que você talvez não saiba é que você pode aprender a usar este comando como um Ninja e facilitar muito sua vida na administração de sistemas Linux.
Como sabemos, os o comando ps lista os processos em execução no sistema, e você consegue saber tudo que está sendo executado no momento. Agora, muitos não sabem usar ao fundo este comando, e com ele é possível por exemplo:
- Identificar qual processo é de determinado usuário
- Identificar qual processo utiliza mais memória ou processamento
- Saber como está formada a árvore de processos
- Criar um monitor em tempo real
Sumário
O Básico do Comando PS
Primeiro começamos com o Básico. Para listar todos os processos, temos duas formas de mostrar os resultados:
Formato BSD
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 185408 4936 ? Ss Mai27 0:05 /sbin/init splash root 2 0.0 0.0 0 0 ? S Mai27 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< Mai27 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S< Mai27 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S Mai27 0:04 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? S Mai27 6:01 [rcu_sched] root 9 0.0 0.0 0 0 ? S Mai27 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S Mai27 0:00 [migration/0] root 11 0.0 0.0 0 0 ? S Mai27 0:00 [watchdog/0] root 12 0.0 0.0 0 0 ? S Mai27 0:00 [cpuhp/0]
Ou o formato UNIX/Linux
$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Mai27 ? 00:00:05 /sbin/init splash root 2 0 0 Mai27 ? 00:00:00 [kthreadd] root 4 2 0 Mai27 ? 00:00:00 [kworker/0:0H] root 6 2 0 Mai27 ? 00:00:00 [mm_percpu_wq] root 7 2 0 Mai27 ? 00:00:04 [ksoftirqd/0] root 8 2 0 Mai27 ? 00:06:01 [rcu_sched] root 9 2 0 Mai27 ? 00:00:00 [rcu_bh] root 10 2 0 Mai27 ? 00:00:00 [migration/0] root 11 2 0 Mai27 ? 00:00:00 [watchdog/0] root 12 2 0 Mai27 ? 00:00:00 [cpuhp/0]
A diferença é pequena, mas na primeira opção temos como destaque o %CPU e %MEM que mostram respectivamente o percentual de consumo de CPU ou memória do sistema.
Identificando os processos de um usuário
Podemos localizar todos os processos de um usuário simplesmente filtrando com a opção -u depois o nome do usuário.
$ ps -f -u marcos UID PID PPID C STIME TTY TIME CMD marcos 1022 1551 0 Mai27 ? 00:01:02 /usr/bin/anydesk --local-service marcos 1023 1022 0 Mai27 ? 00:00:13 /usr/bin/anydesk --local-service marcos 1540 1 0 Mai27 ? 00:00:00 /lib/systemd/systemd --user marcos 1541 1540 0 Mai27 ? 00:00:00 (sd-pam) marcos 1549 1 0 Mai27 ? 00:10:02 /usr/bin/gnome-keyring-daemon --daemonize --login marcos 1551 1362 0 Mai27 ? 00:00:00 /sbin/upstart --user marcos 1620 1551 0 Mai27 ? 00:06:09 dbus-daemon --fork --session --address=unix:abstract=/tmp/dbus-mINqoOxLkR marcos 1642 1551 0 Mai27 ? 00:00:00 upstart-udev-bridge --daemon --user marcos 1674 1551 0 Mai27 ? 00:00:02 upstart-dbus-bridge --daemon --session --user --bus-name session marcos 1675 1551 0 Mai27 ? 00:00:00 upstart-dbus-bridge --daemon --system --user --bus-name system
Identificar o maior consumo de memória
Neste exemplo utilizo uma pequena alteração para que o resultado seja mais customizado. Colocando a opção -eo e depois listando os campos a serem exibidos pid,cmd,%mem,%cpu e depois com a opção –sort para organizar por consumo de memória.
Como a lista fica grande, colocamos o | head no final para mostrar somente os primeiros resultados.
$ ps -eo pid,cmd,%mem,%cpu --sort=-%mem | head PID CMD %MEM %CPU 3726 /usr/lib/firefox/firefox -c 12.0 0.0 2318 /usr/lib/thunderbird/thunde 7.2 0.8 31405 kdenlive 6.4 0.5 4129 /opt/google/chrome/chrome 4.9 2.9 2312 /usr/lib/firefox/firefox 4.3 2.5 4177 /opt/google/chrome/chrome - 3.6 0.8 3962 /usr/lib/firefox/firefox -c 2.6 0.0 16445 /opt/google/chrome/chrome - 2.4 14.2 8712 /opt/google/chrome/chrome - 2.0 0.3
Árvore de processos
Podemos fazer uma lista da árvore de um determinado processo com a opção –forest para listar tudo que partiu do chrome
$ ps -f --forest -C chrome UID PID PPID C STIME TTY TIME CMD marcos 4129 1749 2 Mai27 ? 04:52:13 /opt/google/chrome/chrome marcos 4138 4129 0 Mai27 ? 00:00:00 \_ /opt/google/chrome/chrome -- marcos 4142 4138 0 Mai27 ? 00:00:07 | \_ /opt/google/chrome/chrom marcos 4226 4142 0 Mai27 ? 00:00:28 | \_ /opt/google/chrome/c marcos 4242 4142 0 Mai27 ? 00:00:11 | \_ /opt/google/chrome/c marcos 4257 4142 0 Mai27 ? 00:00:11 | \_ /opt/google/chrome/c marcos 4269 4142 1 Mai27 ? 03:12:03 | \_ /opt/google/chrome/c marcos 4271 4142 0 Mai27 ? 00:01:40 | \_ /opt/google/chrome/c marcos 4294 4142 0 Mai27 ? 00:48:32 | \_ /opt/google/chrome/c marcos 4297 4142 0 Mai27 ? 00:12:51 | \_ /opt/google/chrome/c marcos 4307 4142 0 Mai27 ? 00:00:28 | \_ /opt/google/chrome/c marcos 4314 4142 0 Mai27 ? 00:01:59 | \_ /opt/google/chrome/c marcos 4675 4142 0 Mai27 ? 00:00:10 | \_ /opt/google/chrome/c marcos 4820 4142 0 Mai27 ? 01:34:36 | \_ /opt/google/chrome/c marcos 4834 4142 0 Mai27 ? 01:08:59 | \_ /opt/google/chrome/c marcos 26089 4142 0 Mai27 ? 00:04:53 | \_ /opt/google/chrome/c marcos 26645 4142 0 Mai27 ? 00:03:17 | \_ /opt/google/chrome/c marcos 13380 4142 0 Mai28 ? 00:00:02 | \_ /opt/google/chrome/c marcos 8712 4142 0 Mai28 ? 00:27:33 | \_ /opt/google/chrome/c marcos 19108 4142 0 Mai31 ? 00:00:01 | \_ /opt/google/chrome/c marcos 4109 4142 0 Jun02 ? 00:00:08 | \_ /opt/google/chrome/c marcos 4464 4142 0 Jun02 ? 00:00:04 | \_ /opt/google/chrome/c marcos 8768 4142 0 Jun02 ? 00:10:56 | \_ /opt/google/chrome/c marcos 8815 4142 0 Jun02 ? 00:00:19 | \_ /opt/google/chrome/c marcos 7126 4142 0 11:37 ? 00:00:01 | \_ /opt/google/chrome/c marcos 7179 4142 0 11:37 ? 00:01:05 | \_ /opt/google/chrome/c marcos 7280 4142 3 11:39 ? 00:04:35 | \_ /opt/google/chrome/c marcos 9265 4142 0 12:30 ? 00:00:43 | \_ /opt/google/chrome/c marcos 9974 4142 13 12:46 ? 00:10:46 | \_ /opt/google/chrome/c marcos 10903 4142 0 13:07 ? 00:00:00 | \_ /opt/google/chrome/c marcos 10992 4142 0 13:08 ? 00:00:06 | \_ /opt/google/chrome/c marcos 11142 4142 4 13:11 ? 00:02:21 | \_ /opt/google/chrome/c marcos 11319 4142 16 13:16 ? 00:08:21 | \_ /opt/google/chrome/c marcos 16445 4142 10 13:53 ? 00:01:32 | \_ /opt/google/chrome/c marcos 4177 4129 0 Mai27 ? 01:26:55 \_ /opt/google/chrome/chrome -- marcos 4180 4177 0 Mai27 ? 00:00:00 \_ /opt/google/chrome/chrome
Criar um monitor em tempo real para os consumos de memória e CPU
Para isto, temos que deixar uma janela de terminal somente para este monitor em tempo real.
$ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15' Cada 1,0s: ps -e -o pid,uname,cmd,pmem,pcpu --sort=... PID USER CMD %MEM %CPU 3726 marcos /usr/lib/firefox/firefox -c 12.5 0.0 2318 marcos /usr/lib/thunderbird/thunde 7.1 0.8 31405 marcos kdenlive 6.4 0.5 4129 marcos /opt/google/chrome/chrome 4.9 2.9 2312 marcos /usr/lib/firefox/firefox 4.4 2.5 4177 marcos /opt/google/chrome/chrome - 3.6 0.8 3962 marcos /usr/lib/firefox/firefox -c 2.8 0.0 16445 marcos /opt/google/chrome/chrome - 2.5 7.7 8712 marcos /opt/google/chrome/chrome - 2.0 0.3 9974 marcos /opt/google/chrome/chrome - 2.0 12.2 7179 marcos /opt/google/chrome/chrome - 1.9 0.6 4297 marcos /opt/google/chrome/chrome - 1.8 0.1 15449 marcos /usr/lib/virtualbox/Virtual 1.8 31.9 1106 root /usr/lib/xorg/Xorg -core :0 1.7 1.6
Esta janela ficará se atualizando a cada 1 segundo. Para sair, basta você apertar CTRL + C e pronto.
Espero que tenham gostado das formas de usar o comando ps e que isto facilite bastante seu dia a dia.