Introdução
Quando a maioria de nós usa computadores, executamos vários aplicativos. Esses aplicativos são executados por programas chamados servidores ou sistemas operacionais. Existem muitos tipos diferentes de servidores que funcionam de maneiras diferentes. Um deles é Linux. O Linux executa aplicativos na forma de processos.
No Linux, nos referimos a cada aplicativo como um 'processo'. O servidor é capaz de gerenciar o aspecto de baixo nível do ciclo de vida do processo. Como usuário, você pode precisar interagir com o servidor para manipular alguns aspectos de nível superior. Você pode se comunicar e gerenciar o SO usando várias ferramentas. Existem muitos comandos que você pode usar para modificar vários aspectos e funções do servidor. Aqui está um tutorial fácil de seguir sobre como configurar facilmente seu servidor baseado em Linux no Ubuntu. Você também pode aprender como instalar a Stack LAMP (Linux, Apache, MySQL, PHP).
Este guia foca em como você pode usar ps, kill e nice para gerenciar processos no Linux.
Visualizando Processos em Execução no Linux
- top
Para começar, um dos comandos mais básicos que você deve conhecer é o top. Esta ferramenta ajuda a visualizar quais processos estão em execução no sistema no momento. Veja como ele aparecerá quando você o executar:
|
1 |
top |

No topo do resultado, você pode localizar as estatísticas do sistema. Isso fornece informações sobre coisas como a carga do sistema e o número de tarefas. Neste exemplo, você pode determinar que há um processo em execução e 55 processos ociosos. Os processos ociosos ou adormecidos são aqueles que você não está usando no momento. Isso significa que eles não estão ocupando os recursos do sistema. Por fim, você pode ver todos os processos em execução perto da parte inferior da janela pop-up com as estatísticas de uso.
- htop
Antes de usar este comando, você terá que instalá-lo a partir dos repositórios digitando e executando o seguinte:
|
1 |
sudo apt-get install htop |
Depois de tê-lo, você pode usá-lo para exibir informações semelhantes às que obteve com o top. A principal diferença é que com o comando htop, você obtém um resultado mais amigável para o usuário:
|
1 |
htop |

Como você pode ver, este resultado é fácil de acompanhar e interpretar.
Usando ps para Listar Processos
Embora você possa usar os comandos mencionados acima para visualizar os processos em execução, eles podem nem sempre cobrir todos os cenários. Felizmente, temos uma ferramenta mais forte e flexível à nossa disposição. Este é o comando ps.
Vamos explorar o que você verá se executar o comando como está:
|
1 |
ps |

Nesta saída, você pode ver todos os processos que estão sendo executados em relação ao usuário e sessão atuais. No entanto, isso não fornece muitas informações.
Se você quiser uma visão mais holística de todos os processos em execução no sistema, precisará usar um argumento. Um argumento permite que você veja todos os processos que pertencem a todos os usuários, independentemente da associação com o terminal. A saída também aparece em um formato muito amigável e fácil de ler. Aqui está um exemplo:
|
1 |
ps aux |

Por outro lado, você também pode visualizar essas informações em formato de árvore. Aqui, como você verá, as relações hierárquicas também se tornam aparentes:
|
1 |
ps axjf |

Neste exemplo, você pode ver como o kthreadd é exibido como o pai dos processos subsequentes.
- O que são IDs de Processo?
Como um usuário Linux ou Unix , você deve saber sobre IDs de processo. Também conhecidos como PIDs, essas são identidades exclusivas atribuídas a cada processo pelo sistema. Essas identidades são a forma como o servidor acompanha cada processo individual. Para saber o PID de um determinado processo, você deve usar o comando pgrep, assim:
|
1 |
pgrep bash |
|
1 2 |
Saída: 1340 |
Quando você inicia o sistema, o primeiro processo começa a ser executado. Esse processo é chamado de init. Como um mecanismo padrão, o processo init recebe o PID '1'. Você pode verificar o PID deste processo da seguinte forma:
|
1 |
pgrep init |
|
1 2 |
Saída: 1 |
O processo init tem a responsabilidade de, então, iniciar todos os outros programas ou processos. Compreensivelmente, os processos seguintes terão PIDs crescentes ou maiores.
- O que são Processos Pai?
Outro conceito a conhecer é o processo pai. Se o processo A gera o processo B, então o processo A é o processo pai do processo B. Para ajudar a distingui-los, o sistema atribui aos processos pai um PPID. Você pode notar esse PPID nos cabeçalhos das colunas sempre que executar qualquer comando de gerenciamento, como top, htop e ps.
- O que são relações pai-filho?
Como já sabemos, os processos pai geram processos filho. Essa criação ocorre em duas etapas. A primeira é fork(). Isso começa criando um novo espaço de endereço. Também copia os recursos do pai usando copy-on-write para que estejam disponíveis também no processo filho. A segunda é exec(). Esta é responsável por carregar e executar um executável no espaço de endereço recém-criado.
- E se o processo filho morrer antes do processo pai?
Caso isso aconteça, o processo filho se torna um zumbi. Isto é, até que o processo pai colete algumas informações sobre ele ou informe ao kernel que não precisa das informações associadas. Quando isso acontecer, os recursos que o processo estava usando estarão livres.
- E se o processo pai morrer antes do processo filho?
Nesse cenário, o sistema reatribuirá o processo filho a outro processo pai. Pode ser o init ou qualquer outro processo.
Enviando sinais para processos no Linux
Você pode fazer com que um determinado processo responda a você enviando um sinal. Os sinais ajudam você a se comunicar com o sistema operacional. Você pode usar o sinal para fazer uma aplicação terminar, iniciar ou modificar um determinado comportamento ou tarefa.
- Usando o PID para enviar sinais
Um dos utilitários que você pode usar para enviar sinais no Linux é o kill. Este comando, como sugerido pelo seu nome, ajuda a encerrar ou matar um processo:
|
1 |
kill PIDoftarget_process |
Este utilitário envia o sinal TERM para o processo, o que lhe diz para encerrar o processo. O comando faz com que a aplicação realize a limpeza e saia com facilidade. Caso o programa não saia suavemente com o sinal TERM, você pode ir diretamente enviando o sinal KILL:
|
1 |
kill -KILL PIDoftarget_process |
Este sinal não vai para o programa. Ele vai para o kernel do sistema operacional. O kernel desligará diretamente o processo. Você pode usar isso quando um programa estiver ignorando os sinais que você está enviando para ele.
Neste comando, você também pode substituir o nome do sinal pelo número associado a ele. Por exemplo, você pode usar ‘-15’ no lugar de ‘-TERM’. Da mesma forma, você pode substituir ‘-KILL’ por ‘-9’.
- Usando sinais para diversos fins
Você pode usar sinais para fazer outras coisas além de matar ou encerrar programas. Por exemplo, um problema que você pode ter é lidar com a reinicialização de daemons. Toda vez que um daemon recebe um sinal de desligamento (hang up) ou HUP, ele reiniciará em programas como Apache. Para contornar isso, você pode usar o seguinte sinal:
|
1 |
sudo kill -HUP pidofapache |
Este comando fará com que o Apache recarregue sua configuração. Como resultado, ele continuará a servir o conteúdo relevante.
Se você quiser ver quais sinais pode enviar com o utilitário kill, use o seguinte comando:
|
1 |
kill -l |

- Enviando sinais por nome
Tradicionalmente, você enviaria um sinal usando o PID do programa. No entanto, você tem a opção de enviar sinais usando o nome normal do processo. Para fazer isso, você pode usar o comando pkill. Ele funciona de maneira semelhante a como o comando pkill funciona. A única diferença é que ele permite que você use o nome do processo:
|
1 |
pkill -9 ping |
Este comando pkill é o equivalente ao seguinte comando kill:
|
1 |
kill -9 `pgrep ping` |
Você também tem um comando para quando deseja enviar um sinal para todas as instâncias em vez de um processo específico. O seguinte comando enviará um sinal TERM para todas as instâncias do Firefox em execução no sistema:
|
1 |
killall firefox |
Ajustando prioridades de processos
Outra coisa que você pode fazer com os comandos Linux é ajustar prioridades. Isso significa que você pode decidir qual processo tem prioridade no ambiente do seu servidor. Pode haver certos processos que você considera críticos. Outros podem não ser tão necessários. O sistema só executará estes últimos programas quando sobrarem alguns recursos.
Você pode controlar a prioridade dos processos no Linux através do comando niceness. Este valor indica tarefas de alta prioridade como menos 'nice' e processos de baixa prioridade como mais 'nice'. Pense desta forma: processos de alta prioridade são menos 'nice' porque estão acumulando os recursos. Tarefas de baixa prioridade os estão compartilhando, por isso são mais 'nice'.
Você pode ver o valor 'nice' de um determinado processo ao executar o comando top. Este valor está localizado na coluna ‘NI’. Tarefas de alta prioridade teriam valores 'nice' variando entre ‘-19/-20’. Processos de baixa prioridade variam entre ‘19/20’. Você verá algo assim:
|
1 |
top |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Tarefas: 56 total, 1 em execução, 55 dormindo, 0 paradas, 0 zumbi Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1019600k total, 324496k usado, 695104k livre, 8512k buffers Swap: 0k total, 0k usado, 0k livre, 264812k em cache PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1635 root 20 0 17300 1200 920 R 0.3 0.1 0:00.01 top 1 root 20 0 24188 2120 1300 S 0.0 0.2 0:00.56 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0 |
Se você quiser executar um processo com um valor nice atribuído pessoalmente, basta usar o comando nice:
|
1 |
nice -n 15 comandoaexecutar |
Este comando só funcionará quando você estiver iniciando o programa em questão. Se você quiser alterar o valor nice de um programa que já está em execução, você deve usar o renice:
|
1 |
renice 0 PIDapriorizar |
Conclusão
Como você pode ver, as ferramentas aqui são bastante diferentes das gráficas. Como resultado, elas podem ser difíceis de entender para um iniciante. Este guia ajudará você a se familiarizar com os comandos. Mais prática ajudará você a aprender melhor e a usá-los de forma mais eficiente.
Confira nossos outros recursos que podem ajudar você a gerenciar melhor seus servidores Linux, incluindo tutoriais sobre como configurar seu servidor Linux para usar autenticação baseada em chave SSH, localizar arquivos em seu sistema VPS Linux com whereis, which, whatis, readlink e find, e ler e definir variáveis de ambiente e de shell em um VPS Linux.
Boa computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.