Como executar e controlar processos em segundo plano no Linux

Conteúdo

Um ambiente shell em um computador Linux.

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

Tudo sobre os processos

Sempre que um programa é executado em um sistema operacional Linux ou semelhante ao Unix, um procedimento é iniciado. "Procedimento" é o nome da representação interna do programa em execução na memória do computador.. Existe um procedimento para cada programa ativo. Na realidade, existe um procedimento para quase tudo que roda em seu computador. Isso inclui os componentes do seu ambiente gráfico de desktop (ONDE) O que GNOMO o ONDEe sistema tem maldição que são lançados no início.

Por que por pouco tudo está funcionando? Nós vamos, Bash incorporado como CD, pwd, e apelido não é necessário ter um procedimento iniciado (o “gerado”) quando eles correm. O Bash executa esses comandos na instância do shell do Bash que é executada na janela do seu terminal. Esses comandos são rápidos exatamente porque não precisam ter um procedimento iniciado para serem executados.. (Você pode digitar help em uma janela de terminal para ver a lista de funções integradas do Bash).

Os processos podem ser executados em primeiro plano, Nesse caso, eles apreenderão seu terminal até que sejam concluídos, ou eles podem ser executados em segundo plano. Os processos em execução 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 uma saída de tela.

Um exemplo confuso

Vamos começar um simples ping rastreamento de corrida. Iremos a ping el dominio How-To Geek. Isso será executado como um procedimento de primeiro plano.

ping www.systempeaker.com

Nós obtemos os resultados esperados, rolando para baixo na janela do terminal. Não podemos fazer mais nada na janela do terminal enquanto ping Está correndo. Para terminar o comando, pressione Ctrl+C.

Ctrl + C

O efeito visível do Ctrl+C está destacado na imagem. ping dá um breve resumo e depois para.

Vamos repetir isso. Mas desta vez vamos bater Ctrl+Z ao invés de Ctrl+C. A tarefa não será concluída. Isso se tornará uma tarefa em segundo plano. Obtemos o controle da janela do terminal que nos é devolvida.

ping www.systempeaker.com
Ctrl + Z

O efeito visível de bater Ctrl+Z está destacado na imagem.

Desta vez, somos informados de que o procedimento para. Parado não significa terminado. É como um carro em uma placa de pare. Nós não jogamos fora e jogamos fora. Ainda na estrada, parado, Esperando começar. O procedimento agora é um pano de fundo trabalho.

a jobs comando irá listar os empregos que foram iniciados na sessão de terminal atual. E uma vez que os empregos são (inevitavelmente) processos, ao mesmo tempo, podemos usar o ps comando para vê-los. Vamos usar os dois comandos e comparar suas saídas. Nós vamos usar o T opção (terminal) opção de listar apenas os processos que estão sendo executados nesta janela de terminal. Observe que não é necessário usar um hífen - com ele T opção.

empregos
PST

a jobs comando nos diz:

  • [1]: O número entre parênteses é o número do trabalho. Podemos usar isso para nos referirmos ao trabalho quando precisamos controlá-lo com comandos de controle de trabalho.
  • +: O sinal de mais + mostra que este é o trabalho que terá efeito se usarmos um comando de controle de trabalho sem um número de trabalho específico. É chamado de trabalho padrão. O trabalho padrão é sempre aquele que foi adicionado mais recentemente à lista de trabalhos.
  • Interrompido: O procedimento não está funcionando.
  • ping www.systempeaker.com: A linha de comando que iniciou o procedimento.

a ps comando nos diz:

  • PID: O ID do procedimento do procedimento. Cada procedimento possui uma identificação única.
  • TTY: O pseudo-teletipo (janela do terminal) a partir do qual o procedimento foi executado.
  • ESTATISTICAS: O status do procedimento.
  • CLIMA: A quantidade de tempo de CPU consumido pelo procedimento.
  • COMANDO: O comando que iniciou o procedimento.

Estes são valores comuns para a coluna STAT:

  • D: Sono ininterrupto. O procedimento está em estado de espera, geralmente esperando por entrada ou saída, e não pode ser interrompido.
  • eu: Inativo.
  • R: Com pressa.
  • S: Sonho interrompível.
  • T: Parado por um sinal de controle de trabalho.
  • COM: Um procedimento de zumbi. O procedimento acabou, mas seu processo principal não tem feito isso “Limpo”.

O valor na coluna STAT pode ser seguido por um desses indicadores adicionais:

  • <: Tarefa de alta prioridade (não é agradável para outros processos).
  • Norte: Baixa prioridade (bom para outros processos).
  • eu: procedimento tem páginas bloqueadas na memória (regularmente usado por processos em tempo real).
  • s: Líder da sessão. Um líder de sessão é um procedimento que lançou grupos de processos. Um shell é um líder de sessão.
  • eu: Procedimento multi-threaded.
  • +: Um procedimento de close-up.

Podemos ver que o Bash tem um estado de Ss. O "S" maiúsculo nos diz que o shell Bash está inativo e pode ser interrompido. Assim que precisarmos, responder a. o “s” minúscula nos diz que o shell é um líder de sessão.

O comando ping tem um status de T. Isso nos diz que ping foi interrompido por um sinal de controle de trabalho. Neste exemplo, aquele era o Ctrl+Z costumávamos colocá-lo em segundo plano.

a ps T o comando tem um status de R, o que significa correr. a + indica que este procedimento é membro do grupo de primeiro plano. Então o ps T O comando está sendo executado em primeiro plano.

O comando bg

a bg O comando é usado para retomar um procedimento em segundo plano. Pode ser usado com ou sem número de trabalho. Se você usar sem um número comercial, trabalho padrão vem à tona. O procedimento ainda está sendo executado em segundo plano. Não posso enviar nenhuma entrada para você.

Se emitirmos o bg comando, vamos retomar nosso ping comando:

bg

a ping O comando recomeça e vemos a saída de rolagem na janela do terminal mais uma vez. O nome do comando que foi reiniciado é exibido. Isso é destacado na captura de tela.

processo de ping em segundo plano retomado com saída em uma janela de terminal

Mas temos um obstáculo. A tarefa está sendo executada em segundo plano e não está aceitando entrada. Então, Como nós paramos isso? Ctrl+C não faz nada. Podemos ver quando o escrevemos, mas a tarefa em segundo plano não está recebendo esses pressionamentos de tecla, então continua pingando alegremente.

Na realidade, agora estamos no estranho modo de combinação. Podemos escrever na janela do terminal, mas o que escrevemos é rapidamente varrido pela saída de deslocamento do ping comando. Tudo o que escrevemos entra em vigor em primeiro plano.

Para parar nossa tarefa em segundo plano, devemos colocá-lo em primeiro plano e então pará-lo.

O comando fg

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

Se escrevermos fg nosso ping O comando virá à tona. Os caracteres que digitamos são misturados com a saída do ping comando, mas eles são operados pelo shell como se tivessem sido inseridos na linha de comando como de costume. E na realidade, do ponto de vista da concha Bash, isso é exatamente o que aconteceu.

fg

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

Ctrl + C

Precisamos enviar os sinais certos

Isso não foi exatamente bonito. Evidentemente, executar um procedimento em segundo plano funciona melhor quando o procedimento não produz saída e não precisa de entrada.

Mas, bagunçado ou não, nosso exemplo alcançado:

  • Coloque um procedimento em segundo plano.
  • Restaure o procedimento para um estado de execução em segundo plano.
  • Trazendo o procedimento de volta para o primeiro plano.
  • Terminando o procedimento.

Quando você usa Ctrl+C e Ctrl+Z , está enviando sinais para o procedimento. Estes são formas taquigráficas para usar o kill comando. existir 64 sinais diferentes esse kill Pode enviar. Usar kill -l na linha de comando para listá-los. kill não é a única fonte desses sinais. Alguns deles são gerados automaticamente por outros processos dentro do sistema.

Aqui estão alguns dos mais usados.

  • SIGHUP: Sinal 1. Enviado automaticamente para um procedimento quando o terminal em que está sendo executado é fechado.
  • SIGINT: Sinal 2. Enviado para um procedimento que você acertou. Ctrl+C. O procedimento é interrompido e você é instruído a encerrar.
  • SIGQUIT: Sinal 3. Enviado para um procedimento se o usuário enviar um sinal para parar de fumar Ctrl+D.
  • SIGKILL: Sinal 9. O procedimento para imediatamente e não tentará desligar de forma limpa. O procedimento não se desenrola perfeitamente.
  • SIGTERM: Sinal 15. Este é o sinal padrão enviado por kill. É o sinal de término do programa padrão.
  • SIGTSTP: Sinal 20. Enviado para um procedimento quando você usa Ctrl+Z. Para o procedimento e o coloca em segundo plano.

Devemos usar o kill comando para emitir sinais que não têm combinações de teclas atribuídas.

Maior controle do trabalho

Um procedimento ficou em segundo plano por meio do uso de Ctrl+Z é colocado no estado parado. Temos que usar o bg comando para fazê-lo funcionar novamente. Iniciar um programa como um procedimento executado em segundo plano é fácil. Adicionar um e comercial & ao final da linha de comando.

Mesmo que seja melhor que os processos em segundo plano não gravem na janela do terminal, vamos usar exemplos que fazem. Precisamos ter algo nas imagens que possamos fazer referência. Este comando iniciará um loop infinito como procedimento em segundo plano:

contanto que seja verdade; eco “Como fazer o procedimento de loop geek”; dormir 3; feito &

Somos informados do número do trabalho e da identificação do procedimento de identificação do procedimento. Nosso número de trabalho é 1 e a identificação do procedimento é 1979. Podemos usar esses identificadores para controlar o procedimento.

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 procedimento de loop.

ls

saída do processo de loop de fundo intercalada com a saída de outros comandos

Para interromper nosso procedimento, podemos usar jobs para nos lembrar qual é o número do trabalho e, em seguida, usar kill.

jobs informa que nosso procedimento é o número do trabalho 1. Para usar esse número com kill devemos precedê-lo com um sinal de porcentagem %.

empregos
matar %1

RELACIONADO: Como funcionam os sinais do Linux: SIGINT, SIGTERM y SIGKILL

kill envia o SIGTERM sinal, número do sinal 15, para o procedimento e termina. Da próxima vez que a tecla Enter for pressionada, o status do trabalho é exibido. Lista o procedimento como “finalizado”. Se o procedimento não responder ao kill comando pode elevar um nível. Usar kill com SIGKILL , número do sinal 9. Basta inserir o número 9 Entre kill número do trabalho de comando.

matar 9 %1

Coisas que cobrimos

  • Ctrl + C: Mandar SIGINT, sinal 2, para o procedimento, se você está aceitando entrada, e diz a ele para terminar.
  • Ctrl + D: Mandar SISQUIT, sinal 3, para o procedimento - se você está aceitando entrada - e diz para você sair.
  • Ctrl + COM: Mandar SIGSTP, sinal 20, para o procedimento e diz para você parar (suspender) e se tornar um procedimento em segundo plano.
  • trabalho: Liste trabalhos em segundo plano e mostre seu número de trabalho.
  • bg número de Trabalho: Reinicie um procedimento em segundo plano. Se você não fornecer um número comercial, o último procedimento que se tornou uma tarefa em segundo plano é usado.
  • fg número de Trabalho: traz um procedimento de segundo plano para o primeiro plano e o reinicia. Se você não fornecer um número comercial, o último procedimento que se tornou uma tarefa em segundo plano é usado.
  • linha de comando E: Adicionar um e comercial & no final de uma linha de comando execute esse comando como uma tarefa em segundo plano, que está funcionando.
  • matar %número de Trabalho: Mandar SIGTERM, sinal 15, ao procedimento para terminá-lo.
  • matar 9 %número de Trabalho: Mandar SIGKILL, sinal 9, para o procedimento e termina abruptamente.

RELACIONADO: Como matar processos do terminal Linux

setTimeout(função(){
!função(f,b,e,v,n,t,s)
{E se(f.fbq)Retorna;n = f.fbq = função(){n.callMethod?
n.callMethod.apply(n,argumentos):n.queue.push(argumentos)};
E se(!f._fbq)f._fbq = n;n.push = n;n.loaded =!0;n.version = ’2.0′;
n.queue =[];t = b.createElement(e);t.async =!0;
t.src = v;s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, documento,'roteiro',
‘Https://connect.facebook.net/en_US/fbevents.js ’);
fbq('iniciar', ‘335401813750447’);
fbq('acompanhar', ‘PageView’);
},3000);

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.