Controle de Processo
Devido ao fato de ser multi-usuários e multi-tarefas, implica que necessitamos gerenciar estes recursos naturais do Linux através da interface de linha de comando.
Como qualquer sistema operacional multi-tarefas, Linux executa processos múltiplos e simultâneos.
Embora este pareçam ser simultâneo, na realidade um único processador poder executar um processo por vez; contudo o núcleo do Linux gerencia os recursos de forma a permitir a cada processo utilizar o processador e parecer que cada processo esta sendo executado ao mesmo tempo.
Há vários comando que podem ser usados no controle de processos:
Embora este pareçam ser simultâneo, na realidade um único processador poder executar um processo por vez; contudo o núcleo do Linux gerencia os recursos de forma a permitir a cada processo utilizar o processador e parecer que cada processo esta sendo executado ao mesmo tempo.
Há vários comando que podem ser usados no controle de processos:
- ps - lista os processos que estão em execução no sistema
- kill - envia um sinal para um ou mais processos (geralmente para "matar" um processo)
- jobs - uma maneira alternativa de listar seu próprios processos
- bg - envia um processo para o background (segundo plano)
- fg - envia um processo para o foreground (primeiro plano)
Um exemplo Prático
Embora possa parecer que este assunto é um tanto obscuro, pode ser muito prático para o usuário em geral, que na maioria das vezes trabalha com a interface gráfica do usuário.
Você pode não saber disso, mas a maioria (se não todos) dos programas gráficos podem ser executados a partir da linha de comando. Aqui está um exemplo: há um pequeno programa fornecido com o sistema X Windows chamado xload que exibe um gráfico que representa a carga do sistema. Você pode executar este programa, digitando o seguinte:
[alex@linux alex]$ xload
Colocar um programa em background (segundo plano)
Agora, a fim de tornar a vida um pouco mais fácil, nós vamos executar o programa xload novamente, mas desta vez, vamos colocá-lo em segundo plano para que o prompt volte a ser exibido. Para fazer isso, nós executamos xload assim:
[alex@linux alex]$ xload &
[1] 1223
[alex@linux alex]$
[1] 1223
[alex@linux alex]$
Neste caso, o prompt retorna porque o processo foi colocado no plano de fundo. Agora imagine que você se esqueceu de usar o símbolo "&" para colocar o programa em segundo plano.
Ainda há esperança. Você pode digitar "control-z" e o processo será suspenso. O processo ainda existe, mas está inativo. Para retomar o processo em segundo plano, digite o comando bg (abreviação de background - fundo). Aqui está um exemplo:
Ainda há esperança. Você pode digitar "control-z" e o processo será suspenso. O processo ainda existe, mas está inativo. Para retomar o processo em segundo plano, digite o comando bg (abreviação de background - fundo). Aqui está um exemplo:
[alex@linux alex]$ xload
[2]+ Stopped xload
[alex@linux alex]$ bg
[2]+ xload &
[2]+ Stopped xload
[alex@linux alex]$ bg
[2]+ xload &
Listando seus Processos
Agora que temos um processo em segundo plano, seria útil exibir uma lista dos processos que estão em execução. Para fazer isso, podemos usar o comando jobs ou o comando ps.
[alex@linux alex]$ jobs
[1]+ Running xload &
[alex@linux alex]$ ps
PID TTY TIME CMD
1211 pts/4 00:00:00 bash
1246 pts/4 00:00:00 xload
1247 pts/4 00:00:00 ps
[alex@linux alex]$
[1]+ Running xload &
[alex@linux alex]$ ps
PID TTY TIME CMD
1211 pts/4 00:00:00 bash
1246 pts/4 00:00:00 xload
1247 pts/4 00:00:00 ps
[alex@linux alex]$
Matando Um Processo (Kill)
Suponha que haja um programa que deixa de responder; como se livrar dele? Pode ser usado o comando kill, é claro. Vamos fazer isso em xload. Primeiro, precisa-se identificar o processo que você quer matar. Pode-se usar tanto jobs ou ps, para fazer isso. Se usar jobs, isto retornará o número de processo. Com ps, retornara um ID de processo (PID). Vamos fazê-lo de duas formas:
[alex@linux alex]$ xload &
[1] 1292
[alex@linux alex]$ jobs
[1]+ Running xload &
[alex@linux alex]$ kill %1
[alex@linux alex]$ xload &
[2] 1293
[1] Terminated xload
[alex@linux alex]$ ps
PID TTY TIME CMD
1280 pts/5 00:00:00 bash
1293 pts/5 00:00:00 xload
1294 pts/5 00:00:00 ps
[alex@linux alex]$ kill 1293
[2]+ Terminated xload
[alex@linux alex]$
[1] 1292
[alex@linux alex]$ jobs
[1]+ Running xload &
[alex@linux alex]$ kill %1
[alex@linux alex]$ xload &
[2] 1293
[1] Terminated xload
[alex@linux alex]$ ps
PID TTY TIME CMD
1280 pts/5 00:00:00 bash
1293 pts/5 00:00:00 xload
1294 pts/5 00:00:00 ps
[alex@linux alex]$ kill 1293
[2]+ Terminated xload
[alex@linux alex]$
Um Pouco Mais Sobre kill
Enquanto o comando kill é usado para "matar" os processos, o seu verdadeiro propósito é enviar códigos aos processos. Na maioria das vezes o sinal é para avisar o processo para parar a execução, mas há mais do que isso.
Programas (se forem devidamente escrito) podem captar os sinais do sistema operacional e responder a eles, na maioria das vezes para permitir que algum método tenha um encerramento correto.
Por exemplo, um editor de texto pode captar qualquer sinal que indique que o usuário está fazendo logoff, ou que o computador está sendo desligado. Ao receber este sinal, ele salva o trabalho em andamento antes de sair. O comando kill pode enviar uma variedade de sinais. Digite ls para processar:
Programas (se forem devidamente escrito) podem captar os sinais do sistema operacional e responder a eles, na maioria das vezes para permitir que algum método tenha um encerramento correto.
Por exemplo, um editor de texto pode captar qualquer sinal que indique que o usuário está fazendo logoff, ou que o computador está sendo desligado. Ao receber este sinal, ele salva o trabalho em andamento antes de sair. O comando kill pode enviar uma variedade de sinais. Digite ls para processar:
[alex@linux alex]$ kill -l
irá dar a você uma lista de sinais admissíveis. A maioria é bastante obscura, mas muitos são úteis de conhecer:
Sinal # | Nome | Descrição |
1 | SIGHUP | Sinal para suspender o processo. Programas podem captar este sinal e agir (ou não) sobre isto. |
2 | SIGINT | Sinal para Interromper. Este sinal é dada aos processos para interrompê-los. Os programas podem processar este sinal e agir sobre ela. Você também pode emitir o sinal diretamente digitando control-c na janela do terminal onde o programa está sendo executado. |
15 | SIGTERM | Sinal para terminar. Este sinal é dado a processos para finalizá-los. Mais uma vez, os programas podem processar este sinal e agir sobre ela. Você também pode emitir o sinal diretamente digitando control-c na janela do terminal onde o programa está sendo executado. Este é o sinal padrão enviado pelo comando kill se nenhum sinal for especificado. |
9 | SIGKILL | Sinal para Matar o processo. Este sinal causa o encerramento imediato do processo pelo kernel do Linux. Alguns programas podem se recusar a obedecer esse sinal. |
Agora vamos supor que você tem um programa que está irremediavelmente travado e você quer se livrar dele. Aqui está o que você faz:
- Utilizar o comando ps para obter o process id (PID) do processo o qual você deseja encerrar.
- Enviar um comando kill para este PID.
- Se o processo se recusar a encerrar (isto é, ele ignorar o sinal), enviar crescentes sinais rigorosos até que ele se encerre.
[alex@linux alex]$ ps x
PID TTY STAT TIME COMMAND2931 pts/5 SN 0:00 netscape
[alex@linux alex]$ kill -SIGTERM 2931
[alex@linux alex]$ kill -SIGKILL 2931
No exemplo acima usou-se o comando kill de uma maneira formal. Na realidade da prática, é mais comum de fazê-lo da seguinte maneira desde que o sinal padrão enviado por matar é SIGTERM (que é o default) e matar também pode usar o número de sinal (-15) em vez do nome do sinal (SIGTERM):
[alex@linux alex]$ kill 2931
Então, se o processo não se encerrar, forçar a isto com o sinal SIGKILL (-9):
[alex@linux alex]$ kill -9 2931
Nenhum comentário:
Postar um comentário