O básico: ps aux

O comando ps exibe um snapshot dos processos em execução. A combinação mais usada é ps aux, que mostra todos os processos de todos os usuários no formato BSD.

ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 169576 13280 ?        Ss   08:01   0:02 /usr/lib/systemd/systemd
root         2  0.0  0.0      0     0 ?        S    08:01   0:00 [kthreadd]
www-data  1842  0.2  1.5 214532 62104 ?        S    08:03   0:15 /usr/sbin/apache2 -k start
mysql     2103  1.3  5.2 1298400 210048 ?      Sl   08:03   1:42 /usr/sbin/mysqld
root      5921  0.0  0.0   8536  4096 pts/0    R+   09:45   0:00 ps aux

As colunas mais importantes: PID (identificador do processo), %CPU e %MEM (uso de recursos), STAT (estado) e COMMAND (comando executado).

Formato POSIX: ps -ef

A sintaxe POSIX usa traço e mostra o PPID (processo pai), útil para entender hierarquias.

ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:01 ?        00:00:02 /usr/lib/systemd/systemd
root       412     1  0 08:01 ?        00:00:00 /usr/sbin/sshd -D
www-data  1842   1830  0 08:03 ?        00:00:15 /usr/sbin/apache2 -k start

Saída personalizada com -eo

Para selecionar exatamente quais colunas exibir, use -eo combinado com --sort.

# Top 10 processos por uso de CPU
ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -11
  PID COMMAND         %CPU %MEM
 2103 mysqld           1.3  5.2
 3487 node             0.8  2.1
 1842 apache2          0.2  1.5
 4210 python3          0.1  0.8
    1 systemd          0.0  0.1

Filtrando com grep

Para encontrar um processo específico, combine ps com grep. Use [n]ginx para evitar que o próprio grep apareça no resultado.

ps aux | grep [n]ginx
root      1520  0.0  0.1  65736  5120 ?        Ss   08:02   0:00 nginx: master process
www-data  1521  0.0  0.2  66192  8704 ?        S    08:02   0:00 nginx: worker process
Dica: o truque [n]ginx funciona porque a regex [n]ginx casa com “nginx” mas não casa com a própria string “[n]ginx” que aparece na linha do grep.

Árvore de processos com --forest

Para visualizar a hierarquia pai-filho de forma gráfica:

ps -ef --forest | head -15
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:01 ?        00:00:02 /usr/lib/systemd/systemd
root       412     1  0 08:01 ?        00:00:00  \_ /usr/sbin/sshd -D
root      5800   412  0 09:40 ?        00:00:00      \_ sshd: admin [priv]
admin     5810  5800  0 09:40 pts/0    00:00:00          \_ -bash
root      1830     1  0 08:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  1842  1830  0 08:03 ?        00:00:15      \_ /usr/sbin/apache2 -k start

pgrep: busca direta por nome

O pgrep retorna apenas os PIDs de processos que casam com o padrão, sem precisar de grep.

# Listar PIDs do sshd
pgrep sshd
412
5800
# Mostrar PID e nome do comando
pgrep -a sshd
412 /usr/sbin/sshd -D
5800 sshd: admin [priv]
# Filtrar por usuário
pgrep -u www-data
Dica: combine pgrep -c nginx para contar quantos processos do nginx estão rodando — útil em scripts de monitoramento.