¿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

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.


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.


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.


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

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.