Estou executando um aplicativo que recebe pacotes TCP e UDP e, portanto, não pode ser suspenso. Inicialmente, executei 3 processos do mesmo aplicativo, com argumentos diferentes, no modo background usando &
. Quando eu fiz apenas $fg
, todos os três processos entraram em primeiro plano. Agora, quero enviá-los para segundo plano novamente, mas sem suspensão. Como eu posso fazer isso?
11
Respostas:
Primeiras coisas primeiro: só pode haver um processo em primeiro plano, não os três.
fg
coloca o processo mais recente em primeiro plano. Para tornar o processo de Ctrl+ ze digitarbg
mais rápido para não "perturbar" o aplicativo em questão (observe que o agendador de processos fará isso de qualquer maneira várias vezes por segundo), descubra o PID do processo em primeiro plano e depois em um segundo terminal / SSH, useO seu terminal original dirá
stopped
, mas desde que você enviou uma mensagemSIGCONT
imediatamente, o processo continuará sendo executado em segundo plano.fonte
Se você realmente tem um trabalho em primeiro plano, o bash aguarda a conclusão, que é mais ou menos a definição de um trabalho em primeiro plano . Se o bash ainda tiver o controle do terminal, verifique o que está acontecendo
jobs -l
, por exemplo:Comecei três
ncat
processos de escuta em segundo plano para isso. Você também pode ver "Concluído" ou "Parado" para um status de trabalho.Você pode efetivamente colocar em segundo plano um trabalho em 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- Zseja SIGTSTP, ambos os sinais devem funcionar).
Há uma distinção sutil entre processos e tarefas quando os termos primeiro plano e plano de fundo são usados. Há apenas um trabalho em primeiro plano do shell , pode haver vários processos em primeiro plano (isso está relacionado aos IDs do grupo de processos do terminal 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 "trabalho", quando você usa o comando
bg
ou,fg
está implicitamente se referindo ao trabalho mais recente - no meu caso, o que está+
acima. Esses trabalhos também podem (entre outras coisas) ser explicitamente referidos como% 1% 2 ou% 3 (o número em[]
).Um
fg
comando não qualificado afetará apenas um trabalho, o mais recente; portanto, você pode estar enganado ao entender a situação atual. Um trabalho em segundo plano ainda pode gravar no terminal:Pode depender de como o programa lida com o terminal,
ncat
funciona bem para escrever. Para ler, porém, os programas interromperão a execução e você verá a mensagem "Parado". O shell iniciará os processos e esperará que eles saiam ou recebam um sinal SIGTTIN (nohup
é uma maneira de contornar isso, como estádisown
).Você pode colocar em segundo plano um trabalho parado específico com
(no meu caso, receberei o erro
bash: bg: job 3 already in background
)Caso contrário, se um processo estiver em primeiro plano, a menos que o programa pegue o SIGTSTP e faça algo especial, é improvável que tenha problemas com um rápido Ctrl- Ze
bg
. Não há nada de especial nos programas de rede a esse respeito, as conexões / dados recebidos 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 " CONTROLE DE TRABALHO " da página de manual do bash para obter mais detalhes.
fonte
A maneira mais fácil de fazer isso é usar o programa de tela . Você pode iniciar seu aplicativo no terminal virtual e sair da tela com Ctrl + A, D. Se você deseja retomar sua sessão, digite seu tipo
screen -x
. Se você tiver vários processos, será apresentada uma lista de telas para reconectar. Para mais detalhes, leia a página de manual da tela .fonte