Como Executar e Controlar Processos de plano de Fundo no Linux

  • Dave McKay

    @TheGurkha

  • dia 24 de setembro, 2019, 8:00 EDT
Fatmawati Ela Zaenuri/.com

Use o shell Bash no Linux para gerenciar de primeiro plano e de plano de processos. Você pode usar as funções de controle de trabalho e sinais de Bash para lhe dar mais flexibilidade na forma como executa comandos. Nós mostramos-te como.

tudo sobre processos

sempre que um programa é executado em um sistema operacional Linux ou Unix-like, um processo é iniciado., “Processo” é o nome para a representação interna do programa de execução na memória do computador. Há um processo para cada programa ativo. Na verdade, há um processo para quase tudo que está rodando em seu computador. Isso inclui os componentes do seu ambiente de trabalho gráfico (GDE), como o GNOME ou o KDE, e os servidores do sistema que são lançados no arranque.porquê quase tudo o que está a correr? Bem, Bash built-ins como cd, pwd, e alias não precisam ter um processo lançado (ou “spawned”) quando eles são executados., Bash executa estes comandos dentro da instância da linha de comandos Bash que está a correr na sua janela de terminal. Estes comandos são rápidos precisamente porque eles não precisam ter um processo lançado para eles executarem. (Você pode digitar help em uma janela de terminal para ver a lista de Bash built-ins.)

publicidade

os processos podem ser executados em primeiro plano, caso em que eles assumem o seu terminal até que eles tenham concluído, ou eles podem ser executados em segundo plano., Processos que rodam em segundo plano não dominam a janela terminal e você pode continuar a trabalhar nela. Ou, pelo menos, não dominam a janela do terminal se não gerarem a saída do ecrã.

a Messy Example

we’ll start a simple ping trace running. Nós vamos para ping o domínio de como-To Geek. Isto será executado como um processo principal.

ping www.howtogeek.com

conseguimos os resultados esperados, deslizando pela janela do terminal. Não podemos fazer mais nada na janela do terminal enquanto ping está em execução., Para terminar o comando hit Ctrl+C.

Ctrl+C

o efeito visível doCtrl+C é realçado na imagem. ping dá um breve resumo e, em seguida, para.vamos repetir. But this time we’ll hit Ctrl+Z instead ofCtrl+C. A tarefa não será terminada. Tornar-se-á uma tarefa de fundo. Recuperamos o controlo da janela do terminal.,

ping www.howtogeek.com
Ctrl+Z

O efeito visível de bater Ctrl+Z é realçada na imagem.

desta vez é-nos dito que o processo está parado. Parar não significa acabar. É como um carro num sinal de stop. Não a descartámos e deitámo-la fora. Ainda está na estrada, parado, à espera de ir. O processo é agora um trabalho de fundo.

O comando jobs irá listar as tarefas que foram iniciadas na sessão terminal actual., E como os trabalhos são (inevitavelmente) processos, também podemos usar o comando ps para vê-los. Vamos usar ambos os comandos e comparar as suas saídas. Usaremos a opção T opção (terminal) para apenas listar os processos que estão a correr nesta janela de terminal. Note que não há necessidade de usar um hífen - com a opção T.

jobs
ps T

jobs comando nos diz:

  • : O número entre colchetes é o número do trabalho., Podemos usar isso para se referir ao trabalho quando precisamos controlá-lo com comandos de controle de trabalho.
  • +: o sinal mais + mostra que este é o trabalho que será executado se usarmos um comando de controle de trabalho sem um número de trabalho específico. É chamado de trabalho padrão. A tarefa padrão é sempre a mais recentemente adicionada à lista de Tarefas.
  • parado: o processo não está em execução.
  • ping www.howtogeek.com: a linha de comando que lançou o processo.,

o comandops diz-nos:

  • PID: o ID do processo. Cada processo tem um ID único.
  • TTY: o pseudo-teletipo (janela de terminal) do qual o processo foi executado.
  • STAT: o estado do processo.
  • tempo: a quantidade de tempo de CPU consumido pelo processo.comando
  • : o comando que lançou o processo.

estes são valores comuns para a coluna STAT:

  • D: sono ininterrupto. O processo está em um estado de espera, Geralmente esperando por entrada ou saída, e não pode ser interrompido.,Idle.
  • R: em execução.sono interrompido.
  • T: parado por um sinal de controle de trabalho.Z: um processo zombie. O processo foi encerrado, mas não foi” limpo ” por seu processo pai.
publicidade

o valor na coluna STAT pode ser seguido por um destes indicadores extra:

  • <: tarefa de alta prioridade (não agradável para outros processos).
  • n: prioridade baixa (nice para outros processos).
  • L: O processo tem Páginas bloqueadas na memória (normalmente usadas por processos em tempo real).,
  • s: um líder de sessão. Um líder de sessão é um processo que lançou grupos de processo. Uma concha é um líder de sessão.
  • l: Processo multi-thread.
  • +: um processo de primeiro plano.

Podemos ver que Bash tem um estado de Ss. O maiúsculo ” S ” diz-nos que a concha da Bash está a dormir, e é interruptível. Assim que precisarmos, ele vai responder. O minúsculo ” s ” diz-nos que o shell é um líder de sessão.

o comando ping tem um estado de T., Isto nos diz que ping foi parado por um sinal de controle de trabalho. Neste exemplo, que era o Ctrl+Z usávamos para colocá-lo em segundo plano.

The ps Tcommand has a state ofR, which stands for running. The + indicates that this process is a member of the foreground group. Assim, o comando ps T está a correr em primeiro plano.

o comando bg

o bg é usado para retomar um processo de fundo., 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 é trazido para o primeiro plano. O processo ainda funciona em segundo plano. Você não pode enviar nenhuma entrada para ele.

Propaganda

Se nós problema bg comando, vamos retomar o nosso ping comando:

bg

ping comando de currículos e vemos o deslocamento de saída na janela de terminal, uma vez mais. O nome do comando que foi reiniciado é mostrado para você., Isto está realçado na imagem.mas temos um problema. A tarefa está rodando em segundo plano e não aceita entrada. Então, como é que o paramos? Ctrl+C não faz nada. Podemos vê-lo quando o escrevemos, mas a tarefa de fundo não recebe essas teclas, por isso continua a afastar-se alegremente.

anúncio

na verdade, estamos agora em um estranho modo de mistura. Nós podemos digitar na janela do terminal, mas o que nós digitar é rapidamente varrido pela saída de deslocamento do comando ping. Tudo o que escrevermos faz efeito na parte dianteira.,

para parar a nossa tarefa de fundo, precisamos trazê-la para o primeiro plano e, em seguida, pará-la.

o comando FG

o comando fg irá trazer uma tarefa de fundo 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 vai operar em um trabalho específico. Se for usado sem um número de trabalho o último comando que foi enviado para o fundo é usado.

Se escrevermos fgo nosso comandoping será trazido para o primeiro plano., Os caracteres que escrevemos estão misturados com a saída do comando ping, mas são operados pela shell como se tivessem sido inseridos na linha de comandos como de costume. E, de fato, do ponto de vista da Bash shell, foi exatamente isso que aconteceu.

fg
Propaganda

E agora que temos o ping comando sendo executado em primeiro plano, mais uma vez, podemos usar Ctrl+C para matá-lo.

Ctrl+C

precisamos enviar os sinais certos

que 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, bagunçado ou não, nosso exemplo realizou:

  • colocando um processo em segundo plano.
  • restaurando o processo para um estado em execução em segundo plano.
  • Retornando o processo para o primeiro plano.
  • encerrando o processo.

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

Aqui estão alguns dos comumente usados.sinal 1. É enviado automaticamente para um processo quando o terminal em execução é fechado.

  • SIGINT: sinal 2. Enviado para um processo que você atingiu Ctrl+C. O processo é interrompido e dito para terminar.,
  • SIGQUIT: sinal 3. Enviado para um processo se o utilizador enviar um sinal de saída Ctrl+D.SIGKILL: sinal 9. O processo é imediatamente morto e não vai tentar fechar limpo. O processo não desce graciosamente.SIGTERM: sinal 15. Este é o sinal padrão enviado por kill. É o sinal padrão de terminação do programa.SIGTSTP: sinal 20. Enviado para um processo quando você usa Ctrl+Z. Pára o processo e coloca-o em segundo plano.,
  • devemos usar o comando kill para emitir sinais que não têm combinações de chaves atribuídas a eles.

    controlo adicional das tarefas

    um processo movido para segundo plano usando Ctrl+Z é colocado no estado parado. Temos que usar o comando bg para iniciar a execução novamente. Lançar um programa como um processo de fundo em execução é simples. Adicione um ampersand & ao fim da linha de comandos.,

    anúncio

    embora seja melhor que os processos de fundo não escrevam para a janela do terminal, vamos usar exemplos que o fazem. Precisamos de ter algo nas imagens a que nos possamos referir. Este comando irá iniciar um loop infinito como um processo de fundo:

    while true; do echo “How-To Geek Loop Process”; sleep 3; done &

    nos é dito o número de trabalho e ID de processo do processo. O nosso número de trabalho é 1, e a identificação do processo é 1979. Podemos usar esses identificadores para controlar o processo.,

    anúncio

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

    ls

    para parar o nosso processo podemos usar jobs para nos lembrarmos Qual é o número de trabalho, e então usar kill.

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

    jobs
    kill %1

    kill envia o SIGTERM sinal, sinal de número 15, o processo é encerrado. Quando a tecla Enter é pressionada a seguir, um estado da tarefa é mostrado. Ele lista o processo como “terminado”.”Se o processo não responder ao comando kill pode subir um patamar. Use killwith, signal number 9. Basta colocar o número 9 entre o kill comando o número da tarefa.,

    kill 9 %1

    Coisas que já Coberto

    • Ctrl+C: Envia SIGINT, sinal de 2, para o processo—se é aceitar a entrada—e diz-lhe para terminar.
    • Ctrl+D: envia SISQUIT, sinal 3, para o processo—se estiver a aceitar a entrada—e diz-lhe para sair.
    • Ctrl+Z: envia SIGSTP, sinal 20, para o processo e diz-lhe para parar (suspender) e tornar-se um processo de fundo.
    • jobs: lista as tarefas de fundo e mostra o seu número de trabalho.
    • bg job_número: recomeça um processo de fundo., Se você não fornecer um número de trabalho o último processo que foi transformado em uma tarefa de fundo é usado.
    • FG job_number: traz um processo de fundo para o primeiro plano e reinicializa-o. Se você não fornecer um número de trabalho o último processo que foi transformado em uma tarefa de fundo é usado.
    • commandline &: adicionando um ampersand ao final de uma linha de comando executa esse comando como uma tarefa de fundo, que está em execução.
    • kill %job_ number: SendsSIGTERM, signal 15, to the process to terminate it.,
    • kill 9% job_number: Sends , signal 9, to the process and terminates it abruptly.

    RELATED: How to Kill Processes From the Linux Terminal

    Dave McKay
    Dave McKay usou pela primeira vez computadores quando a fita de papel perfurado estava em voga, e ele tem sido programação desde então. Depois de mais de 30 anos na indústria de TI, ele é agora um jornalista de tecnologia em tempo integral., Durante sua carreira, ele trabalhou como programador freelance, gerente de uma equipe internacional de desenvolvimento de software, um gerente de projeto de serviços de TI, e, mais recentemente, como um oficial de proteção de dados. Dave é um evangelista Linux e defensor de código aberto.Read Full Bio ”

    Leave a Comment