Unix / Linux - Gerenciamento de Processos

Neste capítulo, discutiremos em detalhes sobre o gerenciamento de processos no Unix. Quando você executa um programa em seu sistema Unix, o sistema cria um ambiente especial para esse programa. Este ambiente contém tudo o que é necessário para o sistema executar o programa como se nenhum outro programa estivesse sendo executado no sistema.

Sempre que você emite um comando no Unix, ele cria, ou inicia, um novo processo. Quando você experimentou olscomando para listar o conteúdo do diretório, você iniciou um processo. Um processo, em termos simples, é uma instância de um programa em execução.

O sistema operacional rastreia os processos por meio de um número de identificação de cinco dígitos conhecido como pid ou o process ID. Cada processo no sistema tem um únicopid.

Pids eventualmente se repetem porque todos os números possíveis são usados ​​e o próximo pid rola ou recomeça. Em qualquer ponto do tempo, não existem dois processos com o mesmo pid no sistema porque é o pid que o Unix usa para rastrear cada processo.

Iniciando um Processo

Quando você inicia um processo (executa um comando), há duas maneiras de executá-lo -

  • Processos de Primeiro Plano
  • Processos de Fundo

Processos de Primeiro Plano

Por padrão, cada processo que você inicia é executado em primeiro plano. Ele obtém sua entrada do teclado e envia sua saída para a tela.

Você pode ver isso acontecer com o lscomando. Se você deseja listar todos os arquivos em seu diretório atual, você pode usar o seguinte comando -

$ls ch*.doc

Isso exibiria todos os arquivos, os nomes dos quais começam com ch e terminar com .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

O processo é executado em primeiro plano, a saída é direcionada para a minha tela e se o ls o comando deseja qualquer entrada (o que não é), ele espera por ela no teclado.

Enquanto um programa está sendo executado em primeiro plano e é demorado, nenhum outro comando pode ser executado (iniciar qualquer outro processo) porque o prompt não estaria disponível até que o programa concluísse o processamento e saísse.

Processos de Fundo

Um processo em segundo plano é executado sem estar conectado ao teclado. Se o processo em segundo plano exigir qualquer entrada do teclado, ele aguardará.

A vantagem de executar um processo em segundo plano é que você pode executar outros comandos; você não precisa esperar até que seja concluído para iniciar outro!

A maneira mais simples de iniciar um processo em segundo plano é adicionar um E comercial (&) no final do comando.

$ls ch*.doc &

Isso exibe todos os arquivos cujos nomes começam com ch e terminar com .doc -

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc   ch02-1.doc

Aqui, se o ls comando deseja qualquer entrada (o que não quer), ele vai para um estado de parada até que movamos para o primeiro plano e forneçamos os dados do teclado.

Essa primeira linha contém informações sobre o processo em segundo plano - o número do trabalho e o ID do processo. Você precisa saber o número do trabalho para manipulá-lo entre o fundo e o primeiro plano.

Pressione a tecla Enter e você verá o seguinte -

[1]   +   Done                 ls ch*.doc &
$

A primeira linha informa que o lso processo de segundo plano do comando foi concluído com êxito. O segundo é um prompt para outro comando.

Listagem de processos em execução

É fácil ver seus próprios processos executando o ps (status do processo) comando da seguinte forma -

$ps
PID       TTY      TIME        CMD
18358     ttyp3    00:00:00    sh
18361     ttyp3    00:01:31    abiword
18789     ttyp3    00:00:00    ps

Um dos sinalizadores mais comumente usados ​​para ps é o -f (f para completo) opção, que fornece mais informações conforme mostrado no exemplo a seguir -

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f

Aqui está a descrição de todos os campos exibidos por ps -f comando -

Sr. Não. Coluna e Descrição
1

UID

ID do usuário ao qual este processo pertence (a pessoa que o executa)

2

PID

ID do processo

3

PPID

ID do processo pai (o ID do processo que o iniciou)

4

C

Utilização da CPU do processo

5

STIME

Hora de início do processo

6

TTY

Tipo de terminal associado ao processo

7

TIME

Tempo de CPU gasto pelo processo

8

CMD

O comando que iniciou este processo

Existem outras opções que podem ser usadas junto com ps comando -

Sr. Não. Opção e descrição
1

-a

Mostra informações sobre todos os usuários

2

-x

Mostra informações sobre processos sem terminais

3

-u

Mostra informações adicionais como a opção -f

4

-e

Exibe informações estendidas

Processos de Parada

O encerramento de um processo pode ser feito de várias maneiras diferentes. Freqüentemente, a partir de um comando baseado em console, enviar um pressionamento de tecla CTRL + C (o caractere de interrupção padrão) irá encerrar o comando. Isso funciona quando o processo está sendo executado no modo de primeiro plano.

Se um processo estiver sendo executado em segundo plano, você deve obter seu ID de trabalho usando o pscomando. Depois disso, você pode usar okill comando para encerrar o processo da seguinte forma -

$ps -f
UID      PID  PPID C STIME    TTY   TIME CMD
amrood   6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood   6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood   3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated

Aqui o kill comando termina o first_oneprocesso. Se um processo ignorar um comando normal kill, você pode usarkill -9 seguido pelo ID do processo da seguinte forma -

$kill -9 6738
Terminated

Processos Pais e Filhos

Cada processo unix tem dois números de ID atribuídos a ele: o ID do processo (pid) e o ID do processo pai (ppid). Cada processo do usuário no sistema possui um processo pai.

A maioria dos comandos que você executa tem o shell como pai. Verifica aps -f exemplo em que este comando listou o ID do processo e o ID do processo pai.

Processos Zumbi e Órfãos

Normalmente, quando um processo filho é eliminado, o processo pai é atualizado por meio de um SIGCHLDsinal. Em seguida, o pai pode fazer alguma outra tarefa ou reiniciar um novo filho, conforme necessário. No entanto, às vezes o processo pai é eliminado antes que seu filho seja eliminado. Neste caso, o "pai de todos os processos", oinitprocesso, torna-se o novo PPID (ID do processo pai). Em alguns casos, esses processos são chamados de processos órfãos.

Quando um processo é eliminado, um ps a listagem ainda pode mostrar o processo com um ZEstado. Este é um processo zumbi ou extinto. O processo está morto e não está sendo usado. Esses processos são diferentes dos processos órfãos. Eles concluíram a execução, mas ainda encontram uma entrada na tabela de processos.

Daemon Processes

Daemons são processos em segundo plano relacionados ao sistema que geralmente são executados com as permissões de root e solicitações de serviços de outros processos.

Um daemon não tem terminal de controle. Não pode abrir/dev/tty. Se você fizer um"ps -ef" e olhe para o tty campo, todos os daemons terão um ? para o tty.

Para ser preciso, um daemon é um processo executado em segundo plano, geralmente esperando que aconteça algo com o qual ele seja capaz de trabalhar. Por exemplo, um daemon de impressora aguardando comandos de impressão.

Se você tiver um programa que exige um processamento demorado, vale a pena torná-lo um daemon e executá-lo em segundo plano.

O comando superior

o top comando é uma ferramenta muito útil para mostrar rapidamente os processos classificados por vários critérios.

É uma ferramenta de diagnóstico interativa que atualiza com frequência e mostra informações sobre memória física e virtual, uso de CPU, médias de carga e seus processos ocupados.

Aqui está a sintaxe simples para executar o comando top e ver as estatísticas de utilização da CPU por diferentes processos -

$top

ID do trabalho versus ID do processo

Processos em segundo plano e suspensos são geralmente manipulados via job number (job ID). Este número é diferente do ID do processo e é usado porque é mais curto.

Além disso, um trabalho pode consistir em vários processos executados em série ou ao mesmo tempo, em paralelo. Usar o ID do trabalho é mais fácil do que rastrear processos individuais.