Eu tenho um processo originalmente em execução em primeiro plano. Eu suspendi por Ctrl+ Ze, em seguida, retome sua execução em segundo plano por bg <jobid>
.
Gostaria de saber como suspender um processo em execução em segundo plano?
Como posso colocar um processo em segundo plano em primeiro plano?
Editar:
O processo é enviado para stderr, então como devo emitir o comando fg <jobid>
enquanto o processo está sendo enviado para o terminal?
fg <jobid>
para torná-lo em primeiro plano?Respostas:
Como Tim disse, digite
fg
para trazer o último processo de volta ao primeiro plano.Se você tiver mais de um processo em execução em segundo plano, faça o seguinte:
fg %3
para trazer ovim 23
processo de volta ao primeiro plano.Para suspender o processo em execução em segundo plano, use:
O sinal SIGSTOP interrompe (pausa) um processo essencialmente da mesma maneira que Ctrl+ Z.
exemplo:
kill -STOP %3
.fontes: como enviar sinais para processos no Linux e Unix e como gerenciar trabalhos em segundo plano e em primeiro plano .
fonte
SIGCONT
para mim; Eu usokill -STOP
ekill -CONT
de preferência a lembrar os números de qualquer maneira, mas você pode verificarkill -l
para lembrar-se dos valores numéricosjob
efg <jobid>
enquanto o processo está sendo enviado para o terminal?kill -STOP %job_id
, como explicadoIsso deve ser verdade para qualquer shell com controle de trabalho, que (na maior parte) você pode dar por garantido, a menos que lide com um shell verdadeiramente antigo. Está no padrão POSIX , então
dash
suporta até o controle de tarefas (quando executado de forma interativa ou com-m
).Interativo
bg
fará o plano de fundo do programa suspenso mais recente(use
bg %2
com o número do trabalho, que você pode verificarjobs
)fg
colocará em primeiro plano o programa suspenso mais recentementeEm
zsh
, você pode escrever uma ligação de chave para executar implicitamente afg
partir do prompt através de outro Ctrl+ z:Provavelmente, há também uma maneira inteligente de implicitamente executar
bg
a suspensão, mas parece imprudente; pelo menos para mim, a maioria do meu Ctrl+ zuso é porque o Ctrl+ cestá falhando; Quero seguir isso com, por exemplo,kill %1
e nãobg
, e certamente não quero deixar de matar! (Essa lógica também se estende ao motivo pelo qual eu não uso mais essa ligação de teclas: se eu estiver pressionando o Ctrl+ zpara interromper um processo, a última coisa que eu quero fazer é continuar!)Não interativo
Se você estiver em uma instância de shell diferente (ou um usuário diferente, às vezes incluindo
sudo
comandos), provavelmente não poderá usar os números de trabalho.Você ainda pode atuar em outro processo depois de conhecer seu ID do processo (PID). Você pode obter o PID com
pgrep …
, oups aux |grep …
(ou do mesmo shelljobs -l
, ou$!
) e, em seguida, executar:Se você não souber o ID do processo e não estiver preocupado em suspender outras instâncias do processo pelo nome, poderá passar sinais para um destes:
Um
CONT
sinal para um programa parado com Ctrl+ z(e nãobg
'd) continuará seu progresso (em primeiro plano), o mesmo que se você estivessefg
nele.Re: Erro padrão
A edição desta pergunta pergunta sobre o erro padrão:
A menos que o trabalho em questão tenha componentes em segundo plano (ou todo o trabalho seja em segundo plano, talvez via
kill -CONT
), você não deverá ver a saída enquanto estiver suspensa.Se ainda estiver emitindo dados (seja na saída padrão ou erro padrão), certamente o seu terminal ficará confuso visualmente, mas toda essa saída será ignorada, pois não faz parte da sua entrada. Isso pode tornar mais difícil saber que você não digitou nenhum erro de digitação, mas (cegamente) a digitação
fg
Enterdeve ser suficiente (a menos que você tenha vários trabalhos e o item em questão não seja o mais recente, nesse caso, você realmente precisará do descritor de trabalho )Se você precisar encontrar o descritor de tarefas, use outro terminal para enviar o
STOP
sinal através dos métodos não interativos acima. Isso deve liberar sua exibição (talvez pressione Enteralgumas vezes ou executeclear
ou Ctrl+ L) para que você possa executarjobs
para encontrar o descritor de tarefa e depois executarfg %N
ondeN
está esse número.fonte
CONT
sinal para um processo (job / pipeline) interrompido com Ctrl + Z, ele será retomado em segundo plano, mesmo se você nãobg
o tiver.Digite
fg
para trazê-lo para o primeiro plano.fonte
fg <jobid>
enquanto o processo está sendo enviado para o terminal?jobs
comandofg
; por exemplo:fg %4
CTRL Z
para suspenderbg %4
fonte
O término de um processo pode ser feito de várias maneiras diferentes. Freqüentemente, a partir de um comando baseado no console, o envio de uma Ctrlctecla (o caractere de interrupção padrão) sai do comando. Isso funciona quando o processo está sendo executado no modo de primeiro plano.
Se um processo estiver em execução no modo de segundo plano, primeiro você precisará obter seu ID da tarefa usando o
ps
comando e, em seguida, usar o comando kill para interromper o processo da seguinte maneira:Aqui o
kill
comando encerraria ofirst_one
processo. Se um processo ignorar umkill
comando regular , você poderá usarkill -9
seguido pelo ID do processo da seguinte maneira:fonte