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.