Como posso retomar um trabalho interrompido no Linux?


344

Como posso retomar um trabalho interrompido no Linux? Eu estava usando o emacs e acidentalmente apertei ctrl-z, o que me levou de volta ao console. Vejo quando digito 'trabalhos'

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp

Na verdade, esse é um fluxo de trabalho bastante normal para o Vim. Se você deseja manter os comandos no histórico do bash, pressione Ctrl-zEnter e digite o comando. Obviamente, você pode executar comandos sem sair Vim através do :!comando ed
icc97

Respostas:


383

O comando fgé o que você deseja usar. Você também pode atribuir um número de trabalho se houver mais de um trabalho interrompido.


59
para referência, fg é "primeiro plano". Você também pode continuar o trabalho em segundo plano com "bg".
Sirex

261

Os comandos gerais de controle de tarefas no Linux são:

  • jobs - lista os jobs atuais
  • fg - retome o trabalho que será o próximo na fila
  • fg% [number] - retoma o trabalho [number]
  • bg - Coloque o próximo trabalho na fila em segundo plano
  • bg% [number] - Coloque o trabalho [number] em segundo plano
  • kill% [number] - mata o trabalho numerado [number]
  • kill - [sinal]% [número] - Envia o sinal [sinal] para o número do trabalho [número]
  • disown% [number] - nega o processo (não haverá mais terminal no proprietário); portanto, o comando estará ativo mesmo após o fechamento do terminal.

Isso é praticamente todos eles. Observe a% na frente do número do trabalho nos comandos - é isso que indica que você está falando sobre trabalhos e não processos.


30
I evitar "matar% 1" porque erros de digitação como "matá-1" é realmente muito ruim :)
barrycarter

5
@barrycarter Isso é muito verdade. Eu costumo fazer uma fge uma Ctrl-C;)
Majenko

6
@ barry: É por isso que o init no Upstart ignora o SIG {TERM, KILL} por padrão.
Hello71

7
E, claro, "nunca ficar como root";)
barrycarter

47

Você também pode digitar %<process_name>; ou seja, você pressiona Ctrl-Z no emacs e pode digitar %emacsno console e trazê-lo de volta ao primeiro plano.


Muito bom saber
ZAD-Man

33

Apenas para adicionar às outras respostas, o bash permite ignorar fgse você especificar um número de trabalho.

Por exemplo, eles são equivalentes e retomam o trabalho mais recente:

%
%%
fg
fg %

Eles retomam o trabalho nº 4:

%4
fg 4

2
Embora isso seja legal, ainda acho mais fácil digitar do fgque %.
usar o seguinte

3
%é demais, obrigado! Como datilógrafo, acho fgmuito irritante (o mesmo dedo). Mas então é assim cd.
Gauthier

E você pode iniciá-lo em segundo plano com um bg %ou apenas % &.
Wildcard

no meu caso, quando tentei usar o fg, vejo o processo parado aparecer e desaparecer rapidamente e apenas <fg%> conseguiu restaurá-lo.
Lefi Tarik 25/06

20

Se você não o iniciou no terminal atual, use ps aux | grep <process name>para encontrar o número do processo (pid) e, em seguida, retome-o com:

kill -SIGCONT <pid>

(Apesar do nome, killé simplesmente uma ferramenta para enviar um sinal ao processo, permitindo que os processos se comuniquem. Um "sinal de interrupção" é apenas um dos muitos sinais padrão.)

Dica de bônus: coloque o primeiro caractere do nome do processo []para impedir que o greppróprio comando apareça nos resultados. por exemplo, para encontrar emacsprocesso, useps aux | grep [e]macs


2
Isso também funciona se você renegar um processo parado
mabraham

você também pode ter acesso à sua entrada / saída como acontece quando você diz fg?
Ciprian Tomoiagă

Essa é uma abordagem muito mais flexível do que trabalhar com o número do trabalho. Afirmativo.
thomp45793
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.