Cerrar la terminal sin perder el programa en ejecución


la aplicación se cierra al cerrar la terminal de comandos linux¿Cuántas veces te has puesto a trabajar desde la terminal y has abierto un programa (con su entorno gráfico correspondiente)?

¿Eres de los que dejas la terminal abierta hasta que terminas o la cierras instintivamente para comprobar, horrorizado (si no has guardado lo que has estado haciendo), que el programa se ha ido al garete?

¿Cansado de jurar en arameo antiguo?

¿Te gustaría una solución a tus «males»?

Pues pasa (sin llamar) que dentro encontrarás la solución 😉

Solución

Imagina que abres gedit desde la terminal y, cansado de tener dos ventanas abiertas, decides quitar la terminal de en medio (sin que se cierre la ventana de tu editor de textos).

Pulsa CTRL+Z para detener el proceso; en pantalla aparecerá algo parecido a

truco para lanzar programas desde la línea de comandos

Lo siguiente será desvincular la aplicación del proceso que lo lanzó ejecutando un

disown -h %1

donde 1 es el número del job que se mostró al pulsar ctrl+z (ver el número entre corchetes que aparece en la captura de pantalla)

Lanza un

bg 1

para mandarlo a segundo plano (nuevamente el número es el del job)

Ya puedes cerrar la terminal como más coraje te dé 🙂

NOTA: si lanzaste el programa con un & por detrás (p.e. gedit &) te ahorrarás pasarlo a segundo plano (bg 1) pues ya lo está.

Conclusión

Pequeño truco que viene muy bien para el posicionamiento correcto (cada cosa en su sitio) evitando tener más ventanas de las necesarias abiertas en tu equipo.

Es un truco que suelo usar bastante y que no he publicado antes porque de habitual pensaba que era trivial; tras comprobar que un compañero que usa bastante Linux deja las terminales en segundo plano he optado por publicarlo por si alguno no conoce el «truco» (y eso que había prometido no volver a escribir sobre la terminal en una temporada ;))

25 comentarios en “Cerrar la terminal sin perder el programa en ejecución

  1. Muy interesante el truco 😉

    Bueno, no suelo llamar aplicaciones por la terminal al menos que sea para buscarle errores.

    A lo que si me he acostumbrado es cuando llamo una aplicación por terminal (cuando no tienen icono, etc…) es hacerlo con el símbolo & al final. Más de una vez he cerrado la terminal sin querer …

    Me gusta

  2. ¿ Y no es mas fácil ejecutar el programa con: comanddo & exit ? por ejemplo para ejecutar gedit con la terminal y que se cierre automaticamente la terminal, pero se mantenga abierto el programa gedit: gedit & exit

    Me gusta

  3. Lo dicho anteriormente es para ejecutar un programa que no requiera permisos de root

    Si queremos ejecutar desde la terminal un programa para el cual se necesita poner la contraseña de root ( por ejemplo synaptic ) y queremos que se mantenga dicho programa después de cerrar la terminal, lo que tendríamos que poner en la terminal no es: sudo comando & exit, ya que con eso lo que pasa es que se cierra automáticamente la terminal sin dejar poner la contraseña y por lo tanto sin ejecutarse el programa; deberíamos poner en la terminal: gksu comando & exit , pro ejemplo: gksu synaptic & exit , con lo cual se cierra automáticamente la terminal, pero se abre una ventana en la que nos pide la contraseña de root, y tras ponerla se abre el programa synaptic

    Me gusta

  4. Mas aún, si lo que quieres es ejecutar un programa con la terminal para ver en esta los posibles mensajes de error, lo dicho no sirve, ya que la terminal se autocierra sin dejar ver mensajes de error; en este caso lo que habría que hacer es:
    — ejecutar el programa con la terminal ( en este caso da igual si es con o sin permisos de usuario, es decir se hará lo mismo si ponemos: comando, o sudo comando )
    — una vez abierto el programa, y leido los mensajes que hayan salido en la terminal, poner el cursor del ratón sobre la terminal, para que esta sea el proceso activo, y teclear:
    ctrl+z ( con lo que volverá al prompt )
    bg
    disown ( no hace falta poner nada mas, sin necesidad de ningún número del trabajo-job )
    y por último Mayusc+Ctrl+Q para cerrar la terminal
    Con todo ello el programa permanecera abierto pero abremos cerrado la terminal.

    Me gusta

  5. ¿Y qué tal abrir una sesión de screen nada más abrir el terminal?

    (ver el man o buscar por google linux screen)

    De ese modo, si accidentalmente cerramos la ventana de la terminal, no se cerraran las aplicaciones que hayamos lanzado desde esta, y si por alguna razón deseamos volver a dicha terminal podemos reconectarnos desde otra con «screen -r».

    Me gusta

  6. Otra opción es usar el comando screen, incluso válido para conexines por ssh a otros servidores. A parte, sirve también para que dos personas puedan estar compartiendo el terminal remotamente. Te lo recomiendo encarecidamente en caso que no lo conozcas.

    Me gusta

  7. Creo que con esta linea de comadno mas o menos «universal» se puede solucionar todos los casos:
    nohup gksu comando & exit

    si el comando no requiere permisos de root no ponemos gksu
    si no queremos que se autocierre la terminal, no poenmos & exit

    Me gusta

  8. He encontrado un comando (screen ) que sirve para los tres casos, por lo que es mas fácil de recordar su uso :

    screen comando por ejemplo: screen gedit : abre gedit, y podemos cerrar la terminal sin que se cierre gedit

    screen sudo comando por ejemplo: screen sudo synaptic : nos pide la contraseña, luego abre synaptic, e igualmente podemos cerrar la terminal sin que se cierre synaptic

    En ambos casos mientras se ejecuta el programa podemos ir viendo mensajes de error, si los hubiera, en la terminal.

    Se puede usar de la misma forma el comando byobu ( byobu gedit ; byobu sudo synaptic )

    ( Obviamente hay que tener instalados los paquete screen y/o byobu )

    Le gusta a 1 persona

  9. tengo un problema gordo… nadie sabe como resolvermelo… he lanzado un proceso en el terminal del mac y no hay manera de pararlo. Cuando abro otras sesiones me aparece el mismo proceso dale que te pego.
    y con el ctrol +C llega a pararse pero entonces no puedo escribir en el terminal

    Que puedo hacer!! El mensaje que me sale sin parar en el terminal es este:
    -bash:source-/.bash_profile: No such file or directory

    Me gusta

  10. Estimados, veo que la tienen mas que clara a la teoria, por eso voy a tratar de aplicarla. Mi problema es que tenia ubuntu 12lts y (no me acuerdo como) instalé dropbox de forma tal que cuando abria el SO autoarrancaba, me sincronizaba todo y a medida que modificaba los trabajos los sincronizaba, hasta que aprete actualizar a ubuntu 14lts y me di con que no «autoarranca» y no sincroniza nada salvo que lo arranque por terminal. Es como que tengo que ejecutarlo cada ves que lo arranco, como podrán imaginar me trae bastantes dolores de cabeza y mas cuando me olvido y cierro la terminal y sin querer «apago el programa».

    Me gusta

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.