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.
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
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);