Se você realmente tem um trabalho de primeiro plano, então o bash está esperando que ele seja concluído, isso é mais ou menos o definição de um trabalho em primeiro plano .
Se o bash ainda tiver o controle do terminal, verifique o que está acontecendo com jobs -l
, por exemplo:
$ ncat -kl -p 10111 &
[1] 13404
$ ncat -kl -p 10222 &
[2] 13405
$ ncat -kl -p 10333 &
[3] 13406
$ jobs -l
[1] 13404 Running ncat -kl -p 10111 &
[2]- 13405 Running ncat -kl -p 10222 &
[3]+ 13406 Running ncat -kl -p 10333 &
Eu iniciei três processos de audição background ncat
para isso. Você também pode ver "Concluído" ou "Parado" para um status de trabalho.
Você pode efetivamente fazer o background de um trabalho de primeiro plano a partir de um shell diferente usando o método SIGSTOP / SIGCONT de Stefan Seidel (embora o sinal real enviado por um shell com Ctrl - Z é SIGTSTP, qualquer sinal deve funcionar ).
Há uma distinção sutil entre processos e empregos quando os termos primeiro plano e segundo plano são usados. Existe apenas um trabalho em primeiro plano , pode haver vários processos em primeiro plano (isto está relacionado com IDs de grupos de processos terminais , e pode ser observado quando você inicia dois ou mais processos em um pipeline).
Um processo em execução ou pipeline sob o controle do shell é chamado de "job", quando você usa o comando bg
ou fg
você está implicitamente referenciando o mais recente job - no meu caso, aquele com o +
no acima. Esses trabalhos também podem (entre outras coisas) ser referidos explicitamente como% 1% 2 ou% 3 (o número em []
).
Um comando fg
não qualificado afetará apenas um trabalho, o mais recente, para que você possa estar equivocado em sua compreensão da situação atual.
Um trabalho em segundo plano pode ainda gravar no terminal:
echo foo > /dev/tcp/127.0.0.1/10111
Pode depender de como o programa manipula o terminal, ncat
funciona bem para gravação. Para ler embora os programas parem a execução, você verá uma mensagem "Parado". O shell iniciará processos e aguardará que eles saiam ou recebam um sinal SIGTTIN ( nohup
é uma maneira de contornar isso, assim como disown
).
Você pode trabalhar em segundo plano em um trabalho interrompido específico com
$ bg %3
(no meu caso eu vou receber o erro bash: bg: job 3 already in background
)
Caso contrário, se um processo estiver em primeiro plano, a menos que o programa capture SIGTSTP e faça algo especial, é improvável que ele tenha problemas com um Ctrl - Z e% co_de rápidos %. Não há nada de especial sobre os programas de rede a esse respeito, conexões / dados de entrada serão armazenados em buffer pelo kernel (até certo ponto). Uma conexão de streaming pode ter uma pausa observável.
Consulte a seção " CONTROL DE TRABALHO " da página do manual bash para mais detalhes.