Algunas aplicaciones GUI se inician limpiamente a través de la línea de comando de la Terminal, pero otras no, y hacen que la Terminal espere a que la aplicación finalice. Incluso entonces, algunos no "liberan" la línea de comando.
El misterioso &
sufijo de ampersand parece hacer que el terminal ponga el proceso en segundo plano (pero no estoy seguro de qué sucede allí).
¿Hay alguna forma de iniciar una aplicación a través de la Terminal para que no haya un efecto de "espera", como lanzar algo a través de Alt+ F2?
Me gustaría tener la línea de comando disponible nuevamente de inmediato, sin que haya nada en segundo plano e impresión en la terminal.
command-line
gui
Peter.O
fuente
fuente
screen
(mencionado por Oli y RobinJ). Estoy impresionado por su capacidad; después de leerlo y probarlo ... Solo requiere escribir:screen -d -m gedit
(oscreen gedit
luegoCtrl+a d
para separarlo) ... y todavía tengo acceso completo a la vista de terminal de gedit (para mensajes de advertencia, etc.) en cualquier momento,screen -r
incluso si yo mientras tanto, he cerrado la ventana de terminal original ...&
sufijo del comando. Esto podría ser útil para aclarar: ¿Cuál es la diferencia entre Terminal, Consola, Shell y Línea de comando?Respuestas:
En el caso de gedit, solo mantengo una copia abierta todo el tiempo. Siempre que tenga una copia en ejecución, el inicio de
gedit
llamadas desde el terminal y luego el cierre del terminal no matarán a gedit.Para otras cosas, lo que otras personas han dicho también funcionaría. Soy fanático de
nohup
... Pero si necesita un terminal que pueda desconectar pero luego volver a conectar, desea mirarscreen
.irssi
o inclusowatch uptime
sería un buen ejemplo.screen -r
y BOOM, estás de vuelta.screen
es mucho más grande que eso y puedes combinarlobyobu
para una mejor experiencia de terminal. Leer alrededorfuente
Supongamos
gedit
que el programa que desea ejecutar es independiente (también conocido como "desautorizado", "desenredado", "desacoplado"). Hay diferentes formas dependiendo de lo que quieras hacer exactamente:Programa ya en ejecución
Desconocer:
disown -h
es el camino a seguir si desea hacerlo con un programa que ya se está ejecutando (es decir, si lo olvidónohup
). Primero debes detenerlo usando Ctrl+ Z. Luego puede poner en segundo plano usandobg [jobId]
(por ejemplobg 1
). Obtiene una lista de trabajos en ejecución con su jobId usandojobs
. Después de eso, puede desacoplarlo de la terminal usandodisown -h %[jobId]
. Ejemplo de sesión terminal:Programa aún no iniciado
nohup
nohup
No siempre está presente en todas las máquinas. Si sabe que desea desacoplar de antemano, usaría:Tal vez tendrá que redirigir la salida de la shell, así y su programa de una fuente de entrada de pseudo, por lo que:
nohup ./myprogram > foo.out 2> bar.err < /dev/null &
. Desea redirigir la salida para que no le moleste o para usarla más tarde. La entrada nula puede ayudar a prevenir hickups en ssh an such.Subshell:
Puedes lograr un efecto similar al
Los corchetes abren una nueva subshell para ejecutar gedit.
>/dev/null 2>&1
Redirige la salida de la shell a ninguna parte (suprimiendo la salida). Y&
al final pone el proceso en segundo plano.Multiplexación de terminales
También multiplexación de terminales mediante pantalla o byobu . Básicamente ejecuta el programa en una terminal propia. Realmente puedo recomendar byobu por otras razones también. A continuación hay una lista de atajos de boybu que pueden ser útiles para sus primeros pasos:
Útil:
Menos útil:
El 'at' daemon y otros
at
es una pequeña herramienta útil para ejecutar un comando a una hora programada. Se puede 'mal usar' para separar un comando del shell:También puede examinar
setsid
ystart-stop-daemon
, pero los otros métodos deberían ser suficientes.fuente
bg %1
que solo pueda escribirbg
.Lo hace, y es a menudo lo que quieres. Si olvida usar &, puede suspender el programa con ctrl-z y luego colocarlo en segundo plano con el comando bg, y continuar usando ese shell.
El proceso 'stdin, stdout y stderr todavía están conectados al terminal; puede redirigirlos desde / a / dev / null o cualquier otro archivo (por ejemplo, guardar un registro de salida en algún lugar), según lo desee:
Puede ver el proceso en los trabajos, devolverlo al primer plano (comando fg) y enviarle señales (comando kill).
Algunos programas gráficos se separarán de la terminal; Si ese es el caso, cuando ejecute el comando "normalmente", notará que inicia el programa gráfico y "sale".
Aquí hay un script corto , puedes colocarlo en ~ / bin , al que llamé runbg:
Busco el programa ($ prog) antes de redirigir para que se puedan informar los errores de localización. Ejecútelo como "runbg your-command args ..."; aún puede redirigir stdout / err a un archivo si necesita guardar la salida en algún lugar.
Excepto por las redirecciones y el manejo de errores, esto es equivalente a la respuesta de htorque .
fuente
ctrl-z
(suspender) me da acceso a la línea de comando nuevamente, pero borra la GUI hasta que emito, lobg
que parece suspenderla. (tiene sentido) ... ¿Hay otro comando por el cual pueda separar la GUI ... ¡Ajá! Ahora veo lo que quieres decir consighals (kill command)
... (cosas interesantes estas señales) ... Utilicé un fragmento de código paradd
generar progresivamente las estadísticas ... y usékill
+ una SEÑAL ... ¿Hay una SEÑAL específica para separar un "trabajo"? "?disown
trabajos -p gedit`` y parecía eliminar el trabajo ... (pero recibí mensajes del sistema en la Terminal cuando cerré manualmente gedit ... pero creo Tengo una Terminal jodida en este momento ... demasiado experimento :(jobs -p command
si tiene varias instancias de un comando ejecutándose en segundo plano a la vez. puede usarjobs
para encontrar la identificación de trabajo correcta y luego hacerjobs -p <job-id>
para obtener el PID del trabajo. Personalmente, encuentro la versión con el subshell mucho más fácil. ;-)gedit & disown
Para iniciar una aplicación y desconectarla del terminal lanzado, use & !.
fuente
disown <pid-of-command>
después de iniciar el comando en segundo plano.Utilizar
nohup
Por ejemplo:
fuente
nohup
? Por favor elabora.nohup
debería usarse en este escenario.nohup
aplicación (y eldisown
bash incorporado) no permiten que la señal llegue a la aplicación.nohup
crea un archivo en el directorio actual llamadonohup.out
. Vea la página del manual para más detalles. Prefierodisown
por esta razón, y por el hecho de quedisown
funciona después de su lanzamientogedit
.Abra el terminal, escriba la pantalla , escriba el comando que desea ejecutar, cierre el terminal. El programa debe seguir ejecutándose en la sesión de GNU Screen .
fuente
Esto funcionó para mí:
fuente
xdg-open
Eche un vistazo a esta utilidad de uso general: https://linux.die.net/man/1/xdg-open
Esto abrirá una ubicación relativa en su administrador de archivos.
Esto abrirá un archivo pdf en un lector de pdf.
Incluso puede proporcionar URL web
fuente
Como mucha gente pensó, nohup es lo que hay que considerar. Pero nohup queda abierto en el terminal y muestra la actividad del programa en el terminal, lo cual es irritante. Puede cerrar la terminal después de eso para evitarlo. Descubrí una solución muy simple que uso.
Y eso es. Abre gedit y cierra el terminal cuando se inicia gedit. Como gedit no está asociado con el terminal ahora, permanece activo.
fuente
Esto funciona incluso dentro de un script (como los alias, el trailer '&' normalmente no está permitido en los scripts porque no son interactivos):
fuente
Esto funcionó para mí:
fuente