Linux - Visualizando a Lista de Processos
Ao carregar um sistema operacional baseado no Linux, o kernel é o primeiro a ser iniciado. O kernel, por sua vez, é responsável por iniciar o primeiro processo, que nos sistemas modernos é o processo systemd. Esse processo é responsável por todos os outros processos. Ao iniciar um processo, systemd o faz como um processo filho. O processo filho iniciado pode, por sua vez, iniciar outros processos, formando assim uma árvore de processos.
Para visualizar a árvore de processos, pode-se usar o comando pstree:
programicio@Programicio:~$ pstree
systemd─┬─ModemManager───3*[{ModemManager}]
        ├─NetworkManager───3*[{NetworkManager}]
        ├─accounts-daemon───3*[{accounts-daemon}]
        ├─apache2───5*[apache2]
        ├─avahi-daemon───avahi-daemon
        ├─bluetoothd
        ├─boltd───3*[{boltd}]
        ├─colord───3*[{colord}]
        ├─cron
        ├─cups-browsed───3*[{cups-browsed}]
        ├─cupsd───dbus
        ├─dbus-daemon
        ├─fwupd───5*[{fwupd}]
        ├─gdm3─┬─gdm-session-wor─┬─gdm-wayland-ses─┬─gnome-session-b───3*[{gnom+
        │      │                 │                 └─3*[{gdm-wayland-ses}]
        │      │                 └─3*[{gdm-session-wor}]
        │      └─3*[{gdm3}]
        ├─irqbalance───{irqbalance}
        ├─2*[kerneloops]Para monitorar processos no Linux, usa-se o comando ps. Esse comando possui muitas opções, mas as mais utilizadas são aux e -ef. Por exemplo, para visualizar o estado de todos os processos, usa-se o comando ps aux:
programicio@Programicio:~$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 169800 12476 ? Ss 07:30 0:02 /sbin/init sp root 2 0.0 0.0 0 0 ? S 07:30 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 07:30 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 07:30 0:00 [rcu_par_gp] root 5 0.0 0.0 0 0 ? I< 07:30 0:00 [slub_flushwq] root 6 0.0 0.0 0 0 ? I< 07:30 0:00 [netns] programicio 19276 100 0.0 14144 4992 pts/0 R+ 14:24 0:00 ps aux
Formalmente, aux consiste em três opções: a opção a exibe todos os processos, a u fornece informações detalhadas sobre o uso, e a x mostra a qual TTY(terminal) e qual usuário iniciou o processo. Vamos analisar brevemente as colunas exibidas:
- USER: nome do usuário que iniciou o processo.
- PID: identificador do processo.
- %CPU: porcentagem de tempo do processador usada pelo processo desde seu início.
- %MEM: porcentagem de memória usada pelo processo no momento.
- VSZ: quantidade total de memória requisitada pelo processo.
- RSS: quantidade total de memória usada pelo processo no momento.
- TTY: terminal de onde o processo foi iniciado. O sinal de interrogação indica um processo daemon que não está associado a nenhum TTY.
- STAT: estado atual do processo.
- START: hora de início do processo.
- TIME: quantidade total de tempo do sistema usada pelo processo desde seu início.
- COMMAND: comando usado para iniciar o processo. Se o nome do comando estiver entre colchetes, o processo é um thread do kernel.
Um resultado semelhante pode ser obtido usando outra combinação de opções: -ef.
programicio@Programicio:~$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 09:26 ? 00:00:00 /sbin/init splash root 2 0 0 09:26 ? 00:00:00 [kthreadd] root 3 2 0 09:26 ? 00:00:00 [rcu_gp] root 4 2 0 09:26 ? 00:00:00 [rcu_par_gp] root 5 2 0 09:26 ? 00:00:00 [slub_flushwq] root 6 2 0 09:26 ? 00:00:00 [netns] programicio 4096 3806 0 09:29 ? 00:00:00 /snap/code/155/usr/share/cod programicio 4248 3601 50 09:30 pts/0 00:00:00 ps -ef
Primeiro, são exibidas as colunas do usuário (UID) que iniciou o processo e o identificador do processo (PID). Ao contrário do resumo anterior, a saída também inclui a coluna PPID, que armazena o identificador do processo pai. Em seguida, vem a coluna C, que mostra o uso do processador pelo processo, similar à coluna %CPU no resumo do comando ps aux.
Combinando esse comando com comandos de processamento de texto, podemos filtrar processos específicos. Por exemplo, para obter todos os processos cujo comando contém gnome:
programicio@Programicio:~$ ps aux | grep gnome programicio 2520 0.0 0.0 298564 16320 tty2 Sl+ 09:27 0:00 /usr/libexec/gnome-session-binary --session=ubuntu programicio 2599 0.0 0.0 91492 5376 ? Ssl 09:27 0:00 /usr/libexec/gnome-session-ctl --monitor programicio 2645 5.7 0.5 6473112 337724 ? Ssl 09:27 6:17 /usr/bin/gnome-shell programicio 2800 0.0 0.0 235984 7296 ? Sl 09:27 0:00 /usr/libexec/at-spi2-registryd --use-gnome-session programicio 2819 0.0 0.0 655292 16320 ? Sl 09:27 0:00 /usr/libexec/gnome-shell-calendar-server programicio 3210 0.0 0.0 897828 40236 ? Ssl 09:27 0:00 /usr/libexec/xdg-desktop-portal-gnome programicio 3581 0.4 0.0 706412 59960 ? Ssl 09:28 0:31 /usr/libexec/gnome-terminal-server programicio 10800 0.0 0.0 9120 2112 pts/0 S+ 11:16 0:00 grep --color=auto gnome
De forma semelhante, podemos encontrar todos os processos relacionados ao navegador Google Chrome:
ps aux | grep chrome