Ejecución de programas en segundo plano desde la terminal

121

¿Cómo ejecuto un programa en el fondo de un shell, con la capacidad de cerrar el shell mientras se ejecuta el programa? Digamos que mi UI está teniendo problemas o por alguna razón, necesito iniciar un programa desde la ventana del terminal, digamos, nm-applet :

nm-applet

Cuando se inicia, ocupa el primer plano de la ventana de la terminal.

¿Hay alguna manera simple de ejecutar el programa en segundo plano sin necesidad de dejar la terminal abierta o hacer que ocupe toda la terminal?

En esa nota, encontré una forma de ejecutar programas desde el terminal y permitirle otras entradas, agregando un símbolo de unión ( & ) al comando como tal:

nm-applet &

Pero esto no sirve de mucho ya que cualquier proceso iniciado en la terminal se elimina una vez que se cierra la terminal.

    
pregunta OVERTONE 22.02.2012 - 01:07

8 respuestas

155

Recientemente me ha gustado setsid . Empieza pareciendo que solo estás ejecutando algo desde la terminal pero puedes desconectarte (cerrar la terminal) y sigue funcionando.

Esto se debe a que el comando realmente sobresale y mientras la entrada ingresa al terminal actual, es propiedad de un elemento primario completamente diferente (que permanece activo después de cerrar el terminal).

Un ejemplo:

setsid gnome-calculator

También soy bastante parcial al disown que se puede usar para separar un proceso del árbol actual. Lo usas junto con el símbolo de fondo:

gnome-calculator & disown

También aprendí acerca de las subcapas de desove con paréntesis. Este sencillo método funciona:

(gnome-calculator &)

Y, por supuesto, hay nohup como mencionaste. No me entusiasma el nohup porque tiene una tendencia a escribir en ~/nohup.out sin que yo lo pida. Si confías en eso, podría ser para ti.

nohup gnome-calculator

Y para los procesos a más largo plazo, hay cosas como screen y otros muxers de terminal virtual que mantienen las sesiones activas entre las conexiones. Probablemente estos no se apliquen realmente a usted porque solo quiere acceso temporal a la salida del terminal, pero si quiere volver atrás un tiempo después y ver la última actividad de la terminal, la pantalla probablemente sea la mejor. elección.

Internet está lleno de screen tutoriales, pero aquí hay un comienzo rápido simple:

respondido por el Oli 22.02.2012 - 01:41
46

Estas son las dos formas con las que iría. En primer lugar, no ejecutarlo desde un terminal; pulse Alt + F2 para abrir el diálogo de ejecución y ejecútelo desde allí (sin & amp;).

Desde una terminal, ejecuta

nm-applet &

Pero NO cierre el terminal usted mismo. Es decir, no presione el botón X para cerrar, y no use File - & gt; Salga de su barra de menú. Si cierras el terminal de esa manera, enviará una señal HUP (colgar) al bash que se ejecuta dentro, que a su vez enviará la señal HUP a todos sus hijos (razón por la cual nohup funciona en este caso).

En su lugar, salga del shell ejecutando exit o presionando Ctrl + D . Bash luego repudiará a sus hijos, luego saldrá, dejando los procesos en segundo plano aún en ejecución. Y cuando bash sale, la terminal ha perdido su proceso hijo, por lo que también se cerrará.

Haciendo todo de una vez:

nm-applet & exit
    
respondido por el geirha 23.02.2012 - 12:45
13

Como señaló, puede ejecutar

nohup nm-applet &  

para ignorar la señal final al cerrar el terminal. No hay problema con eso.

    
respondido por el desgua 22.02.2012 - 01:17
10

Una cosa que faltan en muchas otras respuestas es cómo separar un proceso en ejecución que actualmente bloquea el shell. En la mayoría de los terminales y shells, Ctrl + Z detendrá el proceso en ejecución y lo llevará de vuelta a un mensaje de entrada. Entonces, puedes emitir

bg

para enviar el proceso en ejecución a un segundo plano. Problema

fg

en su lugar para volver a poner el proceso en marcha en primer plano.

EDITAR : más detalles en esta respuesta descubrí más tarde.

    
respondido por el krlmlr 31.03.2015 - 16:37
6

Use (exec PROGRAM &> /dev/null & ) para permitir que PID de subshell se haga cargo de PROGRAM . He probado este enfoque varias veces con varios programas diferentes. Cerrar el terminal original no afecta el programa recién generado

Pequeña demostración:

$ # this is before running
$ (exec firefox &> /dev/null &)
$ # and look, we still in side the terminal and can continue working
    
respondido por el Sergiy Kolodyazhnyy 30.11.2015 - 12:35
2

Puedo recomendar el terminal byobu. Puede separar fácilmente su proceso presionando la tecla F6.

    
respondido por el speter 05.03.2013 - 01:07
1

Aunque hay buenas respuestas arriba, me gustaría dar mis 2 centavos sobre cómo uso MATLAB en segundo plano.

sudo -b matlab

La etiqueta -b de sudo puede ejecutar aplicaciones en segundo plano. También puede cerrar el terminal después de ejecutar este comando.

Probablemente, no relacionado, pero hay un maravilloso sitio web que puede usar para explicar los comandos del shell. enlace

    
respondido por el user3342981 28.06.2016 - 16:39
0

No sé si es el camino correcto, pero acabo de comenzar otra sesión mientras dejo al anterior. Por ejemplo, ejecuté un simple servidor web en mi frambuesa. el web.py uno. entonces comienzo una nueva sesión y la dejo sola. Eso es. también es útil ya que todavía está actualizado aunque trabaje en la otra sesión.

    
respondido por el leo 06.07.2016 - 00:15

Lea otras preguntas en las etiquetas