¿Cómo puedo reanudar un trabajo detenido en Linux?

344

¿Cómo puedo reanudar un trabajo detenido en Linux? Estaba usando emacs y accidentalmente presioné ctrl-z, que me lanzó de vuelta a la consola. Puedo verlo cuando escribo 'jobs'

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp
Poli
fuente
Este es en realidad un flujo de trabajo bastante normal para Vim, si desea mantener sus comandos en su historial de bash, entonces presione Ctrl-zescribir sus comandos y luego reanudar. Obviamente, puede ejecutar comandos sin salir de Vim a través del :!comando ed
icc97

Respuestas:

384

El comando fges lo que quieres usar. También puede darle un número de trabajo si hay más de un trabajo detenido.

Ilkka
fuente
59
para referencia, fg es "primer plano". También puede continuar el trabajo en segundo plano con "bg".
Sirex
261

Los comandos generales de control de trabajo en Linux son:

  • trabajos - enumera los trabajos actuales
  • fg : reanuda el trabajo que sigue en la cola
  • fg% [número] - reanudar trabajo [número]
  • bg - Empuja el siguiente trabajo en la cola al fondo
  • bg% [número] - Empuje el trabajo [número] al fondo
  • kill% [número] - Mata el trabajo numerado [número]
  • kill - [señal]% [número] - Enviar la señal [señal] al número de trabajo [número]
  • disown% [número] - desconoce el proceso (no más terminales serán propietarios), por lo que el comando estará activo incluso después de cerrar la terminal.

Eso es casi todos ellos. Tenga en cuenta el% delante del número de trabajo en los comandos: esto es lo que le dice a kill que está hablando de trabajos y no de procesos.

Majenko
fuente
30
Evito "matar% 1" porque mistyping como "matar a 1" es realmente muy mal :)
barrycarter
55
@barrycarter Eso es muy cierto. Usualmente hago una fgy una Ctrl-C;)
Majenko
66
@barry: Por eso init en Upstart ignora SIG {TERM, KILL} de forma predeterminada.
Hola71
77
Y, por supuesto, "nunca se ejecute como root";)
barrycarter
47

También puedes escribir %<process_name>; es decir, presionas Ctrl-Z en emacs, luego puedes escribir %emacsla consola y volver a ponerla en primer plano.

NickD
fuente
Muy bueno saber
ZAD-Man
33

Solo para agregar a las otras respuestas, bash le permite omitir el fgsi especifica un número de trabajo.

Por ejemplo, estos son equivalentes y reanudan el último trabajo:

%
%%
fg
fg %

Estos reanudar el trabajo # 4:

%4
fg 4
Gravedad
fuente
2
Si bien esto es algo genial, todavía me resulta más fácil escribir fgque %.
rr-
3
%es genial, gracias! Como mecanógrafo, me parece fgmuy irritante (mismo dedo). Pero entonces, así es cd.
Gauthier
Y puede comenzarlo en segundo plano con uno bg %o solo % &.
Comodín el
en mi caso, cuando traté de usar fg, veo que el proceso detenido aparece y desaparece rápidamente y solo <fg%> logró restaurarlo.
Lefi Tarik
20

Si no lo ps aux | grep <process name>inició desde la terminal actual, use para encontrar el número de proceso (pid), luego reanude con:

kill -SIGCONT <pid>

(A pesar del nombre, killes simplemente una herramienta para enviar una señal al proceso, permitiendo que los procesos se comuniquen entre sí. Una "señal de interrupción" es solo una de las muchas señales estándar).

Consejo adicional: envuelva el primer carácter del nombre del proceso []para evitar que el grepcomando aparezca en los resultados. por ejemplo, para encontrar el emacsproceso, useps aux | grep [e]macs

mahemoff
fuente
2
Esto también funciona si desconoce un proceso detenido
mabraham
¿también puedes obtener acceso a su entrada / salida como sucede cuando dices fg?
Ciprian Tomoiagă
Este es un enfoque mucho más flexible que trabajar con el número de trabajo. Pulgares hacia arriba.
thomp45793