Header Ads

Como executar e controlar processos em segundo plano no Linux

Use o shell Bash no Linux para gerenciar processos em primeiro plano e em segundo plano. Você pode usar as funções e os sinais de controle de tarefas do Bash para oferecer mais flexibilidade na execução de comandos.Nós mostramos a você como.

Tudo sobre processos

Sempre que um programa éexecutado em um sistema operacional Linux ou Unix, um processo é iniciado.“ Processo ”é o nome para a representação interna do programa em execução na memória do computador. Existe um processo para cada programa ativo. De fato, existe um processo para quase tudo o que está sendo executado no seu computador. Isso inclui os componentes do seu ambiente de área de trabalho gráfica (GDE), como GNOME ou KDE, e daemons do sistema lançados na inicialização.

Por que quase tudo o que está sendo executado?Bem, os built-ins do Bash, como cd, pwd e alias, não precisam ter um processo iniciado (ou "gerado" ”) quando executados.O Bash executa esses comandos na instância do shell Bash que está sendo executada na janela do seu terminal. Esses comandos são rápidos precisamente porque eles não precisam ter um processo iniciado para serem executados.(Você pode digitar help em uma janela de terminal para ver a lista de embutidos do Bash.)

Os processos podem estar em execução em primeiro plano; nesse caso, eles assumem o controle do seu terminal até a conclusão oupode ser executado em segundo plano. Os processos executados em segundo plano não dominam a janela do terminal e você pode continuar trabalhando nela. Ou pelo menos, eles não dominam a janela do terminal se não geram saída de tela.

Um exemplo confuso

Vamos começar um simplespingtrace em execução. Vamos executar ping no domínio How-To Geek. Isso será executado como um processo em primeiro plano.

 ping www. howtogeek. com 

Obtemos os resultados esperados, rolando a janela do terminal.Não podemos fazer mais nada na janela do terminal enquanto o ping estiver em execução. Para finalizar o comando, pressione Ctrl + C.

 Ctrl + C 

O efeito visível do Ctrl + C é destacado na captura de tela.o ping fornece um breve resumo e depois para.

Vamos repetir isso. Mas desta vez, pressionaremos Ctrl + Z em vez de Ctrl + C.A tarefa não será encerrada. Isso se tornará uma tarefa em segundo plano.Nós obtemos o controle da janela do terminal retornada para nós.

 ping www. howtogeek. com 

 Ctrl + Z 

O efeito visível de pressionar Ctrl + Z é destacado na captura de tela.

Desta vez, somos informados de que o processo foi interrompido. Parado não significa encerrado.É como um carro em uma placa de pare.Nós não a jogamos fora e jogamos fora. Ainda está na estrada, parado, esperando para ir.O processo agora é um trabalho em segundo plano.

O comando jobs listará os trabalhos que foram iniciados na sessão atual do terminal.E como os trabalhos são (inevitavelmente) processos, também podemos usar o comando ps para vê-los. Vamos usar os dois comandos e comparar suas saídas. Usaremos a opção T (terminal) para listar apenas os processos em execução nesta janela do terminal. Observe que não há necessidade de usar um hífen - com a opção T.

Trabalhos

 

 ps T 

O comando jobs diz-nos:

  • [1]: O número entre colchetes é o número do job. Podemos usar isso para nos referir ao trabalho quando precisamos controlá-lo com comandos de controle de trabalho.
  • +: O sinal de adição + mostra que este é o trabalho que será acionado se usarmos um controle de trabalhocomando sem um número de trabalho específico.É chamado de trabalho padrão.O trabalho padrão é sempre o adicionado mais recentemente à lista de trabalhos.
  • Interrompido: o processo não está sendo executado.
  • ping www. howtogeek. com: a linha de comando iniciadao processo.

O comando ps nos diz:

  • PID: o ID do processo. Cada processo possui um ID exclusivo.
  • TTY: o pseudo-teletipo (janela do terminal) do qual o processo foi executado.
  • STAT: O status do processo.
  • TEMPO: a quantidade de tempo de CPU consumida pelo processo.
  • COMANDO: O comando que iniciou o processo.

Esses são valores comuns para a coluna STAT:

  • D: sono ininterrupto.O processo está em um estado de espera, geralmente aguardando entrada ou saída, e não pode ser interrompido.
  • I: Inativo.
  • R: Em execução.
  • S: Sono interrompido.
  • T: Interrompido por um sinal de controle do trabalho.
  • Z: Um processo zumbi.O processo foi encerrado, mas não foi "limpo" ”pelo processo pai.

O valor na coluna STAT pode ser seguido por um destes indicadores extras:

  • & lt ;: Tarefa de alta prioridade (não é agradável para outros processos).
  • N: baixa prioridade (agradável para outros processos).
  • L: o processo tem páginas bloqueadas na memória (normalmente usadas em processos em tempo real).
  • s: líder de sessão. Um líder de sessão é um processo que iniciou grupos de processos. Um shell é um líder de sessão.
  • l: processo de vários threads.
  • +: um processo em primeiro plano.

Podemos ver que o Bashtem um estado de Ss.O maiúsculo “ S ”diga-nos que o shell Bash está dormindo e é interrompível. Assim que precisarmos, ele responderá.A letra minúscula “ s ”nos diz que o shell é um líder de sessão.

O comando ping possui um estado T. Isso nos diz que o ping foi interrompido por um sinal de controle de tarefa. Neste exemplo, esse foi o Ctrl + Z que usamos para colocá-lo em segundo plano.

O comando ps T tem um estado de R, que significa execução.O + indica que esse processo é um membro do grupo de primeiro plano. Portanto, o comando ps T está sendo executado em primeiro plano.

O comando bg

O comando bg é usado para retomar um processo em segundo plano. Pode ser usado com ou sem um número de trabalho. Se você usá-lo sem um número de trabalho, o trabalho padrão será trazido para o primeiro plano.O processo ainda é executado em segundo plano. Você não pode enviar nenhuma entrada.

Se emitirmos o comando bg, retomaremos nosso comando ping:

 bg 

O comando ping é retomado e vemos a saída de rolagem na janela do terminal mais uma vez.O nome do comando que foi reiniciado é exibido para você. Isso está destacado na captura de tela.

Mas temos um problema.A tarefa está sendo executada em segundo plano e não aceitará entrada. Então, como vamos parar?Ctrl + C não faz nada. Podemos vê-lo quando digitamos, mas a tarefa em segundo plano não recebe os pressionamentos de teclas, de modo que ele continua tocando alegremente.

Na verdade, nós estamos ’agora em um estranho modo misto. Podemos digitar na janela do terminal, mas o que digitamos é rapidamente varrido pela saída de rolagem do comando ping. Qualquer coisa que digitarmos entra em vigor em primeiro plano.

Para interromper nossa tarefa em segundo plano, precisamos trazê-la para primeiro plano e depois pará-la.

O comando fg

O comando fg trará uma tarefa em segundo plano para o primeiro plano. Assim como o comando bg, ele pode ser usado com ou sem um número de trabalho. Usá-lo com um número de trabalho significa que ele funcionará em um trabalho específico. Se for usado sem um número de trabalho, o último comando que foi enviado para o segundo plano será usado.

Se digitarmos fg, nosso comando ping será trazido para o primeiro plano. Os caracteres digitados são misturados com a saída do comando ping, mas são operados pelo shell como se tivessem sido inseridos na linha de comando, como de costume. De fato, do ponto de vista do shell Bash, foi exatamente isso que aconteceu.

 fg 

Eagora que temos o comando ping em execução em primeiro plano mais uma vez, podemos usar Ctrl + C para eliminá-lo.

 Ctrl + C 

Precisamos enviar os sinais certos

Isso não era exatamente bonito. Evidentemente, executar um processo em segundo plano funciona melhor quando o processo não produz saída e não requer entrada.

Mas, confuso ou não, nosso exemplo conseguiu:

  • Colocando um processo em segundo plano.
  • Restaurando o processo para um estado de execução em segundo plano.
  • Retornando o processo para o primeiro plano.
  • Finalizando o processo.

Quando você usa Ctrl + C e Ctrl + Z, está enviando sinais para o processo. Essas são formas abreviadas de usar o comando kill. Existem 64 sinais diferentes que o kill pode enviar. Use kill -l na linha de comando para listá-los.O kill não é a única fonte desses sinais. Alguns deles são criados automaticamente por outros processos dentro do sistema

Aqui estão alguns dos mais usados.

  • SIGHUP: Sinal 1. Enviado automaticamente para um processo quando oo terminal em que está executando está fechado.
  • SIGINT: Sinal 2. Enviado para um processo em que você pressiona Ctrl + C.O processo é interrompido e instruído para terminar.
  • SIGQUIT: Sinal 3. Enviado para um processo se o usuário enviar um sinal de saída Ctrl + D.
  • SIGKILL: Sinal 9. O processoé imediatamente morto e não tenta fechar de forma limpa.O processo não é interrompido normalmente.
  • SIGTERM: Sinal 15. Este é o sinal padrão enviado pelo kill.É o sinal padrão de finalização do programa.
  • SIGTSTP: Sinal 20. Enviado para um processo quando você usa Ctrl + Z. Ele interrompe o processo e o coloca em segundo plano.

Precisamos usar o comando kill para emitir sinais que não possuem combinações de teclas atribuídas a eles.

Mais controle de trabalho

Um processo movido para segundo plano usando Ctrl + Zé colocado no estado parado. Temos que usar o comando bg para iniciá-lo novamente. Para iniciar um programa como um processo em segundo plano em execução é simples. Anexar um e comercial &até o final da linha de comando.

Embora seja melhor que os processos em segundo plano não gravem na janela do terminal, vamos usar exemplos que o fazem. Precisamos ter algo nas capturas de tela a que podemos nos referir. Este comando iniciará um loop infinito como um processo em segundo plano:

while true;fazer eco “ Processo de Loop de Geek Como fazer ;;dormir 3;done &

Dizem-nos o número do trabalho e o ID do processo.O número do nosso trabalho é 1 e o ID do processo é 1979. Podemos usar esses identificadores para controlar o processo.

A saída do nosso loop infinito começa a aparecer na janela do terminal. Como antes, podemos usar a linha de comando, mas todos os comandos que emitimos são intercalados com a saída do processo de loop.

ls

Para interromper nossoprocesso, podemos usar tarefas para nos lembrar qual é o número da tarefa e, em seguida, usar kill.

jobs informa que nosso processo é a tarefa número 1. Para usar esse número com kill, devemos precedê-lo com um sinal de porcentagem%.

Trabalhos

 

 kill% 1 

kill envia o sinal SIGTERM, número de sinal 15, para o processo e é finalizado. Quando a tecla Enter for pressionada a seguir, um status do trabalho será mostrado. Ele lista o processo como "finalizado". ”Se o processo não responder ao comando kill, você poderá aumentar um pouco. Use kill com SIGKILL, sinal número 9. Basta colocar o número 9 entre o comando kill e o número do trabalho.

 mate 9% 1 

Coisas que já cobrimos

  • Ctrl + C: envia SIGINT, sinal 2, para o processo "— se está aceitando entrada" e diz para terminar.
  • Ctrl + D: Envia SISQUIT, sinal 3, para o processo, se estiver aceitando entrada, e pede para sair.
  • Ctrl + Z: envia SIGSTP, sinal 20, para o processo e informapara parar (suspender) e se tornar um processo em segundo plano.
  • jobs: lista os trabalhos em segundo plano e mostra o número do trabalho.
  • bg job_number: Reinicia um processo em segundo plano. Se você não fornecer um número de trabalho, o último processo que foi transformado em uma tarefa em segundo plano será usado.
  • fg job_number: coloca um processo em segundo plano em primeiro plano e o reinicia. Se você não fornecer um número de trabalho, o último processo que foi transformado em uma tarefa em segundo plano será usado.
  • linha de comando & amp ;: Adicionando um e comercial &até o final de uma linha de comando executa esse comando como uma tarefa em segundo plano, que está sendo executada.
  • kill% job_number: envia o SIGTERM, sinal 15, ao processo para finalizá-lo.
  • kill 9% job_number: envia o SIGKILL, sinal 9, para o processo e o encerra abruptamente.

RELACIONADO: Como eliminar processos do terminal Linux

Via: How to Geek

Veja Também:

Nenhum comentário