O que é um processo no Linux?

O termo processo é freqüentemente desconhecido para qualquer pessoa sem formação em Ciência da Computação. No entanto, ele é frequentemente usado ao discutir a programação do Linux e os processos são essenciais para o trabalho de administração do sistema.

O Linux também usa o termo trabalho para se referir a um conceito muito semelhante. A diferença é sutil, mas importante, e o controle de tarefas é uma ferramenta útil ao executar um ambiente multitarefa. Você pode usar várias ferramentas e comandos integrados para fazer malabarismos com os trabalhos.

O que é um processo?

No nível mais simples, você pode pensar em um processo como o equivalente a um programa que você executa. Pode ser um aplicativo GUI completo, como seu navegador da web. Pode ser um único comando único executado na linha de comando, como ls . Em termos gerais, tudo o que acontece no seu computador depende de um processo, em seu cerne.

Na realidade, um único aplicativo pode utilizar vários processos para realizar tarefas separadas simultaneamente. Uma invocação de linha de comando usando canais, como:

 $ grep "error" log.txt | wc -l

Executará dois processos separados, um para cada segmento de tubo.

Como os processos começam

Os processos são criados explicitamente por você, o usuário, ou automaticamente pelo próprio computador. Na verdade, você pode ter centenas de processos já em execução assim que inicializar.

Os processos podem gerar outros processos e o init, o primeiro processo que é iniciado em muitos sistemas Linux tradicionais, é o responsável final por iniciar cada processo executado.

Como os processos terminam

Muitos processos são comandos de curta duração que realizam uma tarefa e depois param. Digitar ls em um terminal irá iniciar, executar e interromper um processo em frações de segundo.

Alguns processos, como daemons , são executados continuamente. O processo cron , por exemplo, executa outros comandos periodicamente enquanto seu computador host está em execução.

Identificando um Processo

O sistema operacional (SO) atribui um identificador exclusivo a cada processo. É conhecido como PID ou ID do processo. Esse valor é normalmente um número de 1 a 5 dígitos e processos futuros podem reutilizar o PID de um processo anterior que foi totalmente limpo.

Os PIDs são usados ​​pelo próprio SO de muitas maneiras diferentes. Um bom exemplo é o diretório / proc que armazena informações sobre os processos em execução no momento.

Relacionado: Quais são essas pastas em seu diretório raiz do Linux?

O que é um trabalho?

Na terminologia do Linux, um trabalho é um programa gerenciado pelo shell. Normalmente consiste em um processo, mas pode usar vários. Quando você insere um comando em seu terminal, um processo é gerado para executar o comando e um trabalho é criado para ajudar a controlar o comando durante sua execução.

Gestão de empregos

Se você estiver executando um trabalho em primeiro plano, poderá interrompê-lo pressionando Control + C (^ C). Normalmente, isso fará com que o processo seja encerrado e retornará o terminal para um prompt.

 $ sleep 100
^C
$

Como alternativa, pressionar Control + Z (^ Z) interromperá a execução do trabalho, mas não fará com que ele termine. Você pode pensar nisso mais como uma pausa.

 $ sleep 100
^Z
[1]+ Stopped sleep 100
$

Observe que o shell informa o número do trabalho entre colchetes quando você o interrompe. Isso pode ser usado com outros comandos para controlar o trabalho. Por exemplo, você pode reiniciar um trabalho trazendo-o para o primeiro plano usando fg :

 $ fg %1
sleep 100

Você pode usar um comando semelhante para reiniciar o trabalho em segundo plano:

 $ bg %1
[1]+ sleep 100 &
$

Isso retornará o controle a um prompt, para que você possa continuar com outro trabalho enquanto a tarefa é executada. Se você quiser que um trabalho seja executado em segundo plano assim que você iniciá-lo, adicione um & ao final do comando:

 $ sleep 100 &
[1] 61087
$

Nesse caso, o shell imprime o número do trabalho entre colchetes e o PID depois.

Ferramentas comuns para processos de interrogação e trabalhos

Processos de Monitoramento

Um dos comandos mais úteis para obter informações sobre processos é o top . O programa mostra uma visão interativa em tempo real dos processos em execução. É o equivalente em linha de comando de programas gráficos, como o Monitor do Sistema do GNOME ou o Gerenciador de Tarefas do Windows.

Você pode iniciar o programa top com o comando simples, top :

Uma área de cabeçalho exibe a carga da CPU e o uso da memória. Abaixo disso, o topo mostra uma tabela contendo um processo por linha. Os detalhes incluem o PID, quanta energia de CPU disponível o processo está usando e o tempo total de CPU que consumiu. As informações são atualizadas automaticamente, a cada três segundos por padrão.

Existem muitas opções e comandos interativos que podem ser usados ​​para alterar o comportamento do top. Use o comando man top para ler mais:

Obtendo um instantâneo dos processos ativos

Abreviação de status de processo , o comando ps lista processos. Diferentes opções permitem vários filtros e ajustes aos detalhes exibidos. Por padrão, o ps mostra os processos que estão anexados a um terminal e foram iniciados pelo usuário atual. Em outras palavras, principalmente comandos que você digitou na linha de comando.

Com a tarefa anterior ainda em segundo plano, a saída pode ser um pouco assim:

 $ ps
PID TTY TIME CMD
35564 ttys000 0:00.00 sleep 100
73998 ttys000 0:00.43 -bash

Assim como acontece com o top, o ps tem muitas opções para controlar seu comportamento, e elas podem ser descobertas por meio do man ps :

Dois dos mais úteis, que geralmente são combinados, são -e e -f . Eles mostram processos pertencentes a todos os usuários e colunas adicionais, respectivamente. Por exemplo:

 $ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2020 ? 00:11:22 /sbin/init
root 2 0 0 2020 ? 00:00:00 [kthreadd]
...

Listagem de empregos em segundo plano

O comando jobs lista os jobs em segundo plano no shell atual. Para demonstrar seu uso, inicie um trabalho de longa duração em segundo plano:

 $ du -skh ~ >/tmp/du.txt 2>/dev/null &
[1] 61167

Este comando calcula o espaço total em disco usado por seu diretório pessoal, redirecionando sua saída para um arquivo temporário.

 $ jobs
[1]+ Running du -skh ~ > /tmp/du.txt 2> /dev/null &

Eventualmente, quando o trabalho for concluído, uma linha aparecerá em seu terminal semelhante a:

 [1]+ Exit 1 du -skh ~ > /tmp/du.txt 2> /dev/null

Envio de sinais para encerrar processos

Se você identificou um processo de comportamento inadequado, pode ser necessário eliminá-lo. Embora pareça drástico, o comando kill é uma parte normal da caixa de ferramentas de um administrador de sistema. Ele pode enviar qualquer um dos vários sinais, que são notificações padrão para controlar o comportamento do processo. Alguns sinais comuns para enviar são SIGINT, SIGTSTP, SIGTERM e SIGKILL.

SIGINT é o equivalente a pressionar ^ C. SIGTSTP é equivalente a pressionar ^ Z. SIGTERM e SIGKILL são meios de interromper um processo. O primeiro envia uma solicitação ao processo, dando a ele a chance de se encerrar normalmente. O último é um método mais extremo de forçar o encerramento de um processo e deve ser usado como último recurso.

O comando kill também pode funcionar com jobs. Por exemplo:

 $ jobs
[1]+ Running sleep 100 &
$ kill %1
[1]+ Terminated: 15 sleep 100

Leia mais: Maneiras de eliminar programas que não respondem no Linux

Trabalho com processos e trabalhos no Linux

Processos e tarefas são conceitos difíceis de entender, especialmente a diferença entre eles. No entanto, eles são uma das primeiras etapas para entender a administração do sistema no Linux. Os trabalhos são um meio prático de executar diferentes comandos do shell simultaneamente.

Os processos são um conceito de nível inferior que também pode ser manipulado e estão no centro de todo programa executado em um computador.