Saltar para o conteúdo
101 · LPIC-1 (parte 1)

103.5 Criar, monitorar e eliminar processos

TópicoT14ObjetivoCriar, monitorar e eliminar processos, incluindo sinais, foreground/background e daemonsPeso2PáginasLPIC-1 (101) - Version 5.0

Resumo Conciso

Criando processos

  • Comandos interativos — Um único processo em background com &
  • Shell scripts — Programas interpretados executados sequencialmente
bash
command &                        # Executa comando em backgroundxeyes &                          # Janela abre e terminal fica livre

Sinais de processos

SinalNúmeroDescrição
SIGHUP1Término com reinício
SIGINT2Interrompe o processo (Ctrl+C)
SIGQUIT3Sai do processo
SIGKILL9Mata o processo (forçado)
SIGTERM15Termina o processo (gracioso)
SIGTSTP20Suspende o processo (Ctrl+Z)
SIGCONT18Continua processo suspenso

Gerenciando processos em foreground e background

ComandoDescrição
<ctrl> zColoca processo atual em background (suspendido)
jobsLista processos em background
fgRetorna processo para foreground
bgContinua processo suspenso em background

Monitorando processos

ComandoDescrição
psExibe processos do sistema
ps -efLista todos os processos
ps auxLista processos com detalhes
ps -ef --forestÁrvore de processos
topMonitor de processos em tempo real
htopMonitor interativo melhorado
pgrepBusca processos por nome
pkillMata processos por nome
killEnvia sinal a um processo (por PID)
killallEnvia sinal a todos os processos de um nome
xkillMata janela clicando nela
bash
ps -ef | grep "Xorg"ps aux | grep "firefox"ps -ef --foresttop -d 5                          # Atualiza a cada 5 segundospgrep -u "fred"pkill -u "fred"kill -9 <PID>killall -9 firefox

Gerenciando processos de terceiros (daemons)

  • Daemons terminados com d (ex: crond, sshd)
  • Controlados pelo systemctl (systemd) — ver T03 para comandos systemctl detalhados
bash
systemctl start sshdsystemctl stop sshdsystemctl restart sshdsystemctl reload sshdsystemctl status sshdsystemctl is-active sshdsystemctl is-enabled sshd

Detachando de um shell

bash
screen                           # Inicia sessão screenscreen -ls                       # Lista sessõesscreen -r <ID>                   # Reconecta a sessão

Redirecionando saída de processos

bash
cat myinputfile.txt | tee myoutputfile.txt > /dev/null

Verificando processos com pgrep

bash
pgrep -u "fred"                  # Lista PIDs de um utilizadorpgrep -l "Xorg"                  # Lista PID e nomepgrep -a "Xorg"                  # Lista PID e argumentos

Identificando processos

bash
pgrep -P 1                       # Processos cujo processo PAI é 1 (init/systemd)pgrep -P $PPID                   # Processos cujo pai é o shell atualpgrep -d, -a                     # Lista PID e argumentos, separados por vírgula

Usando kill e killall

bash
kill -s "STOP" $(pgrep "Xorg")   # Para processokill -s "CONT" $(pgrep "Xorg")   # Continua processokillall -u "fred" -s "SIGHUP"    # Envia SIGHUP a todos os processos de um utilizador

Exercícios Guiados

  1. Navegar no output do ps:

    bash
    $ ps -ef --forest | grep "su"
  2. Processo e seu filho:

    bash
    $ xeyes &$ ps -ef | grep "xeyes"$ top -d 5$ kill -s "STOP" <xeyes PID># Mude para janela do Xeyes e pressione Ctrl+c
  3. Processo em background com pgrep:

    bash
    $ xeyes &$ pgrep -l "xeyes"$ pgrep -u root "xeyes"$ pgrep -a "xeyes"
  4. Matar com pkill e killall:

    bash
    $ pkill -9 "xeyes"$ pgrep -l "xeyes"$ xeyes &$ killall -9 xeyes$ pgrep -l "xeyes"

Exercícios Exploratórios

  1. Gerar processos de shell para killall:
bash
$  $ sleep 60 &$  $ sleep 60 &$  $ sleep 60 &$  $ pgrep -l "sleep"$  $ killall -9 "sleep"$  $ pgrep -l "sleep"
  1. Listar processos em foreground:
bash
$  $ ps -e | grep tty
  1. Processos de terceiros do utilizador:
bash
$  $ pgrep -P 1 -u "fred"$  $ pgrep -d, -a -P 1 -u "fred"
  1. Iniciar daemon no boot:
bash
$  $ systemctl enable sshd
  1. Listar processos de um directório:
bash
$  $ pgrep -d, -a -f "bash" | grep -E "/(home|etc)/fred"
  1. Verificar processos com pgrep:
bash
$  $ pgrep -d, -P 1 -u fred -a
  1. Reiniciar daemon de logs:
bash
$  $ sudo systemctl restart rsyslog