O que são PIDs Unix e como funcionam?

Conteúdo

Processo criado em um sistema Linux.

Sempre que um procedimento é criado em um sistema Linux, é atribuído um novo número que o identifica em relação a outros aplicativos. Este é o ID do procedimento, o PID, e é usado em todo o sistema para gerenciar processos em execução.

Como os processos funcionam no Linux

O primeiro procedimento que o Linux executa é chamado systemd, recebendo PID 0. Todos os outros processos são gerados como filhos de systemd. Os primeiros geralmente serão coisas do Linux de baixo nível com as quais você não precisa se preocupar, mas mais abaixo na árvore, o sistema começará a lançar processos de nível de usuário como MySQL e Nginx.

Cada procedimento também possui um PPID, que armazena o PID do pai pelo qual o procedimento foi criado. Também existe um processo TTY, que armazena o ID do terminal que você usou para iniciar o procedimento, y UID, que armazena o ID do usuário que o criou. Qualquer procedimento que geralmente não tenha um TTY é chamado diabo, uma definição usada para denotar processos do sistema que são executados em segundo plano e não têm um terminal de controle.

Sempre que um procedimento é fechado, que o PID está habilitado para uso por outro procedimento. Cada procedimento também é fechado com um código de saída, que geralmente é usado para indicar se ocorreu ou não um erro. O código de saída 0 é uma saída limpa, qualquer coisa maior é um erro específico.

Em uma nota mais técnica, PIDs são uma parte importante dos namespaces do Linux. Os namespaces ocultam certas partes do sistema de processos em execução em diferentes namespaces, o que capacita ferramentas de conteinerização como Docker. Com namespaces, a árvore PID é cortada em um determinado galho, e apenas essa filial é entregue ao procedimento em contêineres. Este ramo é reiniciado a partir do PID 1, para que o contêiner pareça estar sendo executado em uma nova instalação do Linux.

Processos de visualização

Para uma lista completa de processos, pode executar o ps comando:

sudo ps -e

O que irá gerar uma lista muito longa de todos os processos em execução, o que certamente é um pouco difícil de navegar.

Uma lista completa de processos.

Você pode filtrar os resultados canalizando a saída para grep, O que ps não tem uma função de pesquisa embutida:

sudo ps -e | grep "nome do processo"

Mesmo que você deva ser avisado que, estranhamente, isto também irá corresponder ao recém-criado grep processo, O que ps mostrar argumentos de comando, que incluem sua string correspondente, que evidentemente se combina. Se você só precisa do PID de um determinado nome de procedimento, a pgrep O comando apenas retorna o PID e nada mais.

Um visualizador muito mais útil é o top comando, que atua como um gerenciador de tarefas do seu terminal. Mostra todos os processos classificados por uso de CPU, bem como algumas estatísticas gerais do sistema:

O comando Top mostra todos os processos classificados pelo uso da CPU, bem como algumas estatísticas gerais do sistema.

Se você estiver executando um desktop Linux, isso também mostra os aplicativos em execução no momento, mesmo que a maioria dos aplicativos seja multi-threaded, portanto, o Google Chrome preenche esta lista em execução em vários processos com diferentes PIDs.

Parar processos

Sendo realista, não fará muito com o procedimento real além de desligá-lo, já que você não terá que gerenciar a criação do procedimento. (Gerenciado automaticamente quando você executa um comando ou script). O comando para fazer isso é chamado de forma sucinta kill, que pega um determinado PID e fecha esse procedimento:

sudo matar 40589

Além disso, você pode matar todos os processos com um determinado nome usando o killall comando. Como um exemplo, para liberar um pouco de RAM em seu sistema, pode executar:

sudo killall chrome

Evidentemente, esta não é a melhor maneira de fechar aplicativos de desktop, mas a maioria dos processos não vai gerar muito barulho se forem fechados desta forma.

Apesar disto, se o procedimento for um serviço Linux, você vai querer usar o service comando para interagir com ele. Como um exemplo, recarregando o nginx:

recarregar serviço nginx

Ou desligue:

serviço nginx parar

Arquivos PID

Um ID de procedimento identifica exclusivamente um procedimento enquanto esse procedimento está em execução. Se você tiver que reiniciar o Nginx, é possível que um novo ID de procedimento seja atribuído a ele.

É aqui que os arquivos PID entram em jogo; eles são uma forma de comunicação entre processos, essencialmente um arquivo que armazena o PID atual de um determinado procedimento. Outro procedimento pode ler este arquivo e inerentemente saber, como um exemplo, qual é o PID do MySQL. Quando o MySQL inicia, escreva o seu próprio PID neste arquivo para todo o sistema ver.

Em geral, Os arquivos PID são armazenados em /var/run/, mesmo que isso seja apenas uma prática comum e não um requisito, semelhante a como os arquivos de log são armazenados em /var/log/.

A maioria dos processos com arquivos PID também terá um rodando ao mesmo tempo, o que é feito com a ajuda de arquivos de bloqueio. Arquivos de bloqueio são uma forma de determinar um sinalizador que permite apenas um procedimento iniciar ao mesmo tempo. Quando um procedimento como o Nginx é iniciado, verifica se o arquivo de bloqueio existe e, sim, não é assim, vai começar normalmente. Mas se já estiver lá, O Nginx gerará um erro e se recusará a iniciar.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.