Lança dois processos e retorna o primeiro processo para o primeiro plano para que possa ser morto com ctrl-c

0

Estou lançando dois processos em um script bash:

run_webserver

xdg-open http://$(hostname)/dev-environment

O run_webserver é um processo em andamento, então eu preciso ser capaz de matá-lo com ctrl-c. O comando xdg-open simplesmente inicia uma página no navegador. Se eu separar esses comandos com um e comercial (&), o segundo processo tira o "foco" do primeiro e eu não posso mais matá-lo com ctrl + c ..., em vez disso, ele deve procurar em ps e executar% código%. Alguma idéia?

    
por frankadelic 06.08.2012 / 18:45

3 respostas

4

& (Ampersand) envia o processo para o segundo plano. Isso significa que se você executar "run_webserver &" então este processo será executado no backgrond.

Você pode trazer esse processo para o primeiro plano, observando o ID do trabalho para o processo no terminal.

Etapas para colocar o processo em primeiro plano e matar

  1. jobs: - > este comando listará todo o processo em execução no terminal.

  2. fg: - > este comando trará o processo para o primeiro plano.

Então você pode usar seu ctrl-c para matar o processo, ou qualquer outra sequência que mate o processo.

Por favor, encontre as capturas de tela anexadas: -

    
por Ankit 06.08.2012 / 19:09
1

Você pode definir um trap para matar o processo em segundo plano ao sair e aguardar o processo em segundo plano.

#!/bin/bash

trap 'kill $!' EXIT
run_webserver &
xdg-open "http://$HOSTNAME/dev-environment"
wait

Como alternativa, execute o outro comando no plano de fundo

#!/bin/bash

xdg-open "http://$HOSTNAME/dev-environment" &
run_webserver

Veja também o link

    
por geirha 07.08.2012 / 08:59
1

fg retornará o processo mais recente para o primeiro plano. fg - retornará o penúltimo processo para o primeiro plano.

Além disso, você deve usar somente kill -9 como último recurso, depois que todo o resto falhou, porque SIGKILL (-9) não permite que o programa faça qualquer limpeza antes de sair. Primeiro, basta enviar kill sozinho, o que equivale a kill -TERM . Se isso falhar após aguardar algum tempo, envie SIGHUP: kill -HUP . Somente depois que esses sinais falharem, tente SIGKILL.

    
por Scott Severance 08.08.2012 / 10:45