Processos de usuário em segundo plano e como manipulá-los

Publicado por Daniel Zaia Manzano em 22/07/2013

[ Hits: 77.955 ]

 


Processos de usuário em segundo plano e como manipulá-los



Seja como usuário comum ou como root, podemos executar processos em segundo plano, para desfrutar do sistema multi-tarefas e deixar o prompt livre para outras atividades.

Os comandos/combinações para manipular processos em segundo plano, são:
  • rfg :: coloca o processo em primeiro plano (foreground).
  • bg :: coloca o processo em segundo plano (background).
  • jobs :: lista os processos correndo em segundo plano, ou apenas pausados/parados.
  • & :: o caractere "E comercial" colocado ao final de um comando, faz com que o mesmo rode em segundo plano desde o início.
  • Ctrl+c :: mata o processo atual ativo.
  • Ctrl+z :: pausa/para o processo atual ativo.

Vamos tomar como exemplo, o comando:

ping -c 120 127.0.0.1 &>/dev/null

Este comando realiza um ping na interface de loopback da própria máquina, com 120 repetições, e tanto a saída normal quanto a saída de erros, vai para o arquivo "/dev/null". Ou seja, é um comando que apenas vai "travar" o prompt, servindo aos propósitos desta dica.

Primeiramente, vamos iniciar o comando em primeiro plano, pausá-lo pressionando a combinação Ctrl+z, visualizá-lo com jobs e colocá-lo em segundo plano com bg:

ping -c 120 127.0.0.1 &>/dev/null
^Z
[1]+  Parado     ping -c 120 127.0.0.1 &>/dev/null

$ jobs

[1]+  Parado     ping -c 120 127.0.0.1 &>/dev/null

$ bg %1

[1]+ ping -c 120 127.0.0.1 &>/dev/null &

$ jobs

[1]+  Executando ping -c 120 127.0.0.1 &>/dev/null &

$

Ao rodar o comando jobs, cada processo recebe um número (independente do PID). Desta forma, usamos esta numeração para dizer qual processo queremos retomar, colocar em segundo plano (como acima) ou terminar.

Agora, vamos iniciar o processo, já em segundo plano, colocando o "&" ao final da linha, visualizá-lo com "jobs", colocar em primeiro plano com "fg", e em seguida, terminar o processo com a combinação Ctrl+c.

ping -c 120 127.0.0.1 &>/dev/null &
[1] 24771

$ jobs

[1]+  Executando   ping -c 120 127.0.0.1 &>/dev/null &

$ fg %1

ping -c 120 127.0.0.1 &>/dev/null

^C

$

Para terminar um processo rodando em segundo plano:

ping -c 120 127.0.0.1 &>/dev/null &
[1] 24775

$ jobs

[1]+  Executando  ping -c 120 127.0.0.1 &>/dev/null &

$ kill %1

$ jobs

[1]+  Terminado   ping -c 120 127.0.0.1 &>/dev/null

$

Obs.: também é possível terminar um processo em segundo plano pelo seu PID.

Curiosidade:- Experimente rodar o seguinte comando:

ping 127.0.0.1 &

* Já alerto que ele é inofensivo e pode ser resolvido utilizando apenas os conhecimentos adquiridos nesta dica.

Outras dicas deste autor

Macete para busca reversa de comandos

netstat -ltunp: Descobrindo serviços rodando no sistema e respectivos PIDs

Macete para apagar conteúdo de arquivo sem excluí-lo

Liberando memória RAM ociosa

Visualizando arquivos PDF no terminal

Leitura recomendada

Matando processos de um único usuário

Teclas de emergência do Linux

Comando para manter o histórico do bash limpo

Jogar saída de microfone local para host remoto

Ubuntu 12.04 LTS - Deixando sua máquina mais rápida

  

Comentários
[1] Comentário enviado por JunioRibeiro em 03/09/2015 - 11:29h


Excelente dica meu brow, eu estava com estava com algumas dificuldades aqui quando tentava rodar alguns processos em segundo plano e sua dica me deu a solução, vlw mesmo!!!!

[2] Comentário enviado por biophas em 21/04/2016 - 14:20h

Parabéns Daniel, uma bela contribuição.


[3] Comentário enviado por vandomen em 06/08/2016 - 01:20h

Boas Dicas, obrigado por contribuir.

[4] Comentário enviado por dan108 em 10/08/2016 - 09:33h

Mano uma duvida. Quando eu coloco o procedimento para rodar em bg ele continua dando retorno na minha tela do fg. Por exemplo:


$ ping google.com &
[1] 6896

$ PING google.com (177.35.32.87) 56(84) bytes of data.
64 bytes from b1232057.virtua.com.br (177.35.32.87): icmp_seq=1 ttl=61 time=9.27 ms
64 bytes from b1232057.virtua.com.br (177.35.32.87): icmp_seq=2 ttl=61 time=8.94 ms
f64 bytes from b1232057.virtua.com.br (177.35.32.87): icmp_seq=3 ttl=61 time=8.73 ms
g 64 bytes from b1232057.virtua.com.br (177.35.32.87): icmp_seq=4 ttl=61 time=12.1 ms
164 bytes from b1232057.virtua.com.br (177.35.32.87): icmp_seq=5 ttl=61 time=9.15 ms
64 bytes from b1232057.virtua.com.br (177.35.32.87): icmp_seq=6 ttl=61 time=9.13 ms
....


Eu consigo entrar com os comando e rodar mas ainda continua aparecendo a saída do procedimento. Tem como arrumar isso ou é assim mesmo ?
Se alguém poder me dar uma mão. OBS não é só com o ping q da problema, acontece com todos os programas.

[5] Comentário enviado por dzm_linux em 16/09/2016 - 00:13h

Amigo, é o seguinte:

Quando você executa um processo em segundo plano, você faz com que a sua execução naquele momento não interfira em outras tarefas que você possa executar. Ou seja, o prompt fica liberado.

Entretanto, isso não interfere na saída visual do processo, de forma que comandos com saída visual continuarão, por padrão, a sair para a tela.
Isso é completamente normal.

Se, por algum acaso, você se deparou com um ping em segundo plano, tente entender que o prompt está essencialmente liberado, ainda que visualmente não pareça.
Para cancelar este processo em segundo plano, basta executar 'kill %1', mesmo que isso apareça fora de ordem na tela.

Espero ter esclarecido sua dúvida.

Abs,

[6] Comentário enviado por reiGMF em 29/06/2018 - 00:50h

Cara otimo tutorial ! ajudou muito mesmo, obrigado!

[7] Comentário enviado por removido em 03/03/2019 - 11:58h

Olá, camaradas.
Criei um script bem simples para iniciar uma música e que fica em segundo plano quando o executo com dois clicks, porém quando vou ao terminal não sei trazê-la para o primeiro plano. E quando é executada pelo terminal, o terminal a mostra porém não posso usá-lo pois a todo instante mostra informação sobre a música. Digito "jobs" e não aparece nada, mesmo executando pelo terminal.
ex: mpv --no-video /home/user/Música/ &



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts