¿Cómo configurar el comando en segundo plano, cerrar la terminal y volver a fg?


10

Estoy tratando de averiguar cómo ejecutar un comando en segundo plano y luego ponerlo en primer plano más adelante. Estoy harto de tutoriales y respuestas donde la gente dice que es simple, solo agregue &al final del comando para ejecutarlo en segundo plano. Funciona solo dentro de una sola ventana de terminal. Quiero poner el comando en segundo plano en una terminal y volver a ponerlo en primer plano después de volver a abrir la terminal

Ejemplo:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

Por supuesto, después de cerrar la terminal, no se encuentra ningún trabajo.

Siguiente ejemplo:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

¿Qué hice mal? ¿Alguien podría explicarme cómo ejecutar el comando en segundo plano y volver a ponerlo en primer plano?

Respuestas:


11

Es imposible de la manera que quieres.

Repasemos algunos conceptos básicos:

  • Un grupo de procesos es una colección de procesos relacionados que se pueden señalar a la vez.
  • Una sesión es una colección de grupos de procesos, que están conectados a un único dispositivo terminal (conocido como terminal de control) o no están conectados a ningún terminal.

Si cerró la terminal, todos los procesos en la sesión están muertos, excepto aquellos (demonios) reparentados en el proceso init. Y no hay forma de darles una terminal de control nuevamente.

En una palabra, la reparación de procesos está altamente restringida en los sistemas POSIX (la demonización es una excepción) y sus requisitos no pueden ser satisfechos.


66
Técnicamente esta es la respuesta correcta, pero creo que los visitantes que tienen este problema encontrarán "su solución" en las otras respuestas que mencionan screen / byobu / tmux.
Programador

Tienes razón ... pero desde mi punto de vista, los conceptos básicos son más importantes para entender que el sistema funciona mejor y entender lo que quieres y lo que haces mal. ¡Gracias a los dos!
Timur Fayzrakhmanov

16
  1. Instalar screen:

    sudo apt-get install screen
  2. Inicio screen:

    screen -S session_name
  3. Ejecute sus comandos lo que necesita.

  4. Desconecte screende la terminal (sus comandos seguirán ejecutándose):

    Presione CTRL+ a+d

  5. Cerrar la terminal

  6. Abra otra terminal y vuelva a conectar la última screensesión:

    screen -r

Para obtener más información y opciones adicionales para screenbuscar man screen.


2
Screen o byobu (especialmente si está ejecutando ubuntu). Byobu se basa en la pantalla si estoy en lo correcto, pero creo que tiene una funcionalidad adicional que encuentro útil y más fácil de usar, pero eso es una cuestión de opinión.
Programador

Gracias buena sugerencia! ¡Tal vez sea necesario en la función!) De Rusia con amor <3
Timur Fayzrakhmanov

@Programster, sí, Byobu es ex. pantalla. Tiene tanto byobu-screen como byobu-tmux.
user.dz

1
Lo recomiendo tmuxcomo alternativa a screen.
gerrit

5

¿Has probado: byobuo tmuxcuáles son multiplexores terminales? No es exactamente lo que está buscando, pero tiene un comportamiento similar.

byobu-screen

Luego ejecute su comando, para separar:

byobu-screen -d

Resumir:

byobu-screen -r

Ver https://help.ubuntu.com/community/Screen


Esos también, +1.
cetrero
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.