¿Cómo puedo ejecutar un comando desde la terminal sin bloquearlo?

45

Ejecuto muchos programas en Ubuntu desde la terminal, pero me gustaría poder continuar usando la terminal después de tener abierto un programa. ¿Cómo puedo poner los programas en segundo plano para no tener que abrir otra ventana?

Salvador Dalí
fuente

Respuestas:

60

Hay diferentes formas de ejecutar un programa de terminal y continuar usando el terminal:

  • Puede abrir otra pestaña de terminal (haga clic con el botón derecho y luego seleccione "Abrir nueva pestaña").
  • Puede agregar &el comando que ejecuta. Tenga en cuenta que no verá la salida de texto al terminal, como mensajes de error.
  • Puede escribir Ctrl- Zy luego ejecutar bg. Esto tiene el mismo efecto que corrercommand &
  • Puede ejecutar nohup command &y luego presionar enter. (Gracias a ccpizza , vea los comentarios a continuación).

Sin embargo, presionar Alt, F2y luego ejecutar su comando desde la GUI generalmente se considera la mejor práctica, ¡no hay terminal en absoluto!

Tenga en cuenta que al usar &(no nohup), cerrar el terminal aún terminará la aplicación a menos que se ejecute disowndespués .

EDITAR: Parece que el uso nohupa veces dejará pequeños excrementos en su carpeta de inicio. Lo que normalmente se habría registrado en el terminal aparentemente se guarda en un archivo en ~ /.

~~

Una forma sencilla de ejecutar un programa en segundo plano es program-name & disown, que lo llevará a un terminal que puede cerrarse sin matar el proceso.

WindowsEscapist
fuente
44
Para evitar matar el proceso secundario después de cerrar el terminal, puede iniciar su aplicación como nohup firefox&.
ccpizza
¡Guay! ¡No lo sabía (pero tras la experimentación, el terminal todavía está "bloqueado")!
WindowsEscapist
no está 'bloqueado', solo 'parece' bloqueado, si escribe enter una vez, recibirá un mensaje.
ccpizza
Ah, no me había dado cuenta antes.
WindowsEscapist
program-name & disownes una buena solución
Doctor Henry
8

Puede ejecutar el comando con un & después.

Por ejemplo:

Thunderbird y

Ver aquí para más información.

Viertaxa
fuente
Esto sólo funciona hasta que se cierre la ventana de terminal, una vez que cierre la ventana del programa terminará
kurdtpage
6

Puede utilizar setsidpara ejecutar el programa en una nueva sesión además de &>/dev/nullpara que no reciba ningún mensaje de registro.

Entonces sería como

setsid program-name &>/dev/null

Rumid
fuente
Guay. Debe mantener el proceso en ejecución cuando cierre la sesión del usuario y la sesión actual.
Mikhail Moskalev
1

Con el screencomando, puede abrir varias sesiones de terminal con una sola ventana y tocar

apt-get install screen (On Debian based Systems)

yum install screen (On RedHat based Systems)

screen (iniciar nueva pantalla)

[Your command]

Ctrl+A d para salir de la pantalla ... y así sucesivamente

https://linuxize.com/post/how-to-use-linux-screen/

Ahmed Ismail
fuente
0

Puede ejecutarlo en una terminal virtual como tmux(o screenescuché que ya no se mantiene)

# This ataches your terminal to a virtual terminal
tmux
run_your_command
# This detaches your virtual terminal (previous command can be running)
CTRL-b d
run_other_commands # on your terminal
# re-attach the virtual terminal to see the status of run_your_command
tmux a

tmux puede hacer mucho más, como:

  • mover su terminal virtual a otra terminal
  • comparte el terminal virtual en varios terminales (otros usuarios pueden ver lo que estás haciendo ;-))
  • dividir la "pantalla" para tener varias terminales.
  • ...

https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/

Sebastien DA ROCHA
fuente