He buscado esto antes, pero nunca he podido encontrar una respuesta.
En Windows, si tengo una ventana de consola abierta, escriba winmine
y presione Intro, aparecerá Buscaminas, completamente separado del programa cmd. La instancia de Buscaminas no está vinculada al símbolo del sistema de ninguna manera que yo sepa, con la excepción de que el padre del Buscaminas se configuró en esa instancia del símbolo del sistema. Sin embargo, es diferente en Linux.
En Linux, si tengo una ventana de consola abierta, escriba emacs
y presione Intro, se abrirá Emacs, pero parece estar vinculado a la línea de comando. Específicamente, parece que ya no puedo usar la línea de comando hasta que se cierre esa instancia de Emacs. ¿Hay alguna manera de replicar el comportamiento de Windows en Linux?
¡Gracias!
fuente
Respuestas:
En
bash
,detach
es un incorporado, utilizado de la siguiente manera:En
zsh
, puedes poner en segundo plano y separar en una sola operación:fuente
Anexar
&
a la línea de comando:Esto pondrá a emacs en segundo plano y le permitirá continuar usando su terminal.
Tenga en cuenta que esto todavía dejará emacs como un subproceso de su terminal, y cuando salga del terminal también saldrá de emacs. Para evitar esto, escriba:
Los paréntesis le dicen al terminal que desconecte el proceso de emacs del terminal.
Aún así, los mensajes stdout y stderr del programa aparecerán en el terminal. Para evitar esto, use:
fuente
Ctrl
+C
en la ventana de terminal se emitió este comando, el proceso finaliza: <Utilizar
nohup
. Me gusta esto:nohup amarok &
Espero que esto ayude.
fuente
Publiqué una respuesta a un hilo anterior de tema similar con respuestas de varias fuentes. A continuación hay una copia de esa respuesta adaptada para este hilo.
Siguientes trabajos:
Esta es la respuesta de Nathan Fellman más la redirección.
"&> / dev / null" redirige tanto stdout como stderr al dispositivo nulo. El último comercial hace que el proceso se ejecute en segundo plano. Los paréntesis alrededor del comando harán que su "gui_app" se ejecute en una subshell.
Hacer esto desconectará el proceso "gui_app" de la consola desde la que ejecuta este comando. Entonces, incluso si cierra la ventana en la que se está ejecutando el emulador de terminal principal, "gui_app" no se cerrará. Ejecuté esto, luego miré el árbol de procesos con el comando "pstree" y encontré que una aplicación iniciada de esta manera se convertirá en un proceso hijo para "init".
Por ejemplo,
ejecutará la aplicación en segundo plano, pero se convertirá en un proceso secundario del proceso de la consola y finalizará cuando cierre el terminal. (Aunque salir del terminal a través de bash usando el comando de salida o Ctrl-D permitirá que bash se limpie entregando el proceso en segundo plano a init).
"nohup" funciona como NawaMan ha sugerido, pero eso redirige la salida y el error a un archivo de forma predeterminada. Como JeffG ha respondido, el comando "desautorizar" (si está disponible en el shell) puede separar el proceso del terminal después de que haya iniciado un proceso en segundo plano:
(Por cierto, todo esto se aplica a bash. Estoy seguro de que otros shells tienen otros métodos / sintaxis para hacerlo).
Alguna referencia: Procesos de rechazo (UNIX Power Tools)
Si se trata de una simple llamada a una aplicación GUI, sin opciones complicadas y tal, parece que usar un lanzador como "gmrun" o dmenu (advertencia: audio fuerte) también es una buena opción. Asociarlo a una combinación de teclas. Todavía no uso un lanzador pero he probado esos dos.
NOTA: CarlF en los comentarios de los otros hilos informa que las aplicaciones GUI iniciadas mediante el método "gui_app &" no se cierran cuando sale del terminal principal. Creo que estábamos cerrando la terminal de diferentes maneras. Estaba cerrando la ventana en la que se ejecutaba el emulador de terminal. Creo que puede haber estado saliendo del emulador de terminal a través del shell (comando de salida o Ctrl-D). Probé esto y vi que salir de bash no detiene la GUI iniciada como proceso de fondo del terminal, como dice CarlF. Parece que bash deja de lado los procesos en segundo plano para iniciar cuando se le da la oportunidad de limpiar. De hecho, este debe ser el mecanismo por el cual el proceso en segundo plano iniciado en una subshell se transfiere a init.
fuente
util-linux incluye una herramienta llamada setsid que básicamente hace lo que hace detach:
Esto se ejecutará
someprogram
en una nueva sesión.fuente
Intenta escribir
xemacs &
para abrir XEmacs en segundo plano.No se refiera a esto como "emular el comportamiento de Windows". Ay.
También podrías:
fuente
Puse el siguiente código en un archivo de script ejecutable llamado "sbg" para "fondo silencioso". Hace todas las cosas necesarias para desconectar completamente el programa que se inicia desde el shell: redirige stdin, stdout y stderr de / a
/dev/null
, ignora los bloqueos, se ejecuta en segundo plano y se desconecta.Entonces puedes simplemente hacer
sbg emacs
. También se puede pasar ningún argumento que desea:sbg emacs --daemon FILE1 FILE2
.fuente
(gui_app &> /dev/null &)
lugar (respuesta de @ EMPraptor)Ponga un signo y después del comando.
fuente
Si está utilizando bash, puede rechazar el proceso:
fuente
Puedes usar esta sola línea:
fuente
Como dicen las otras respuestas, puede usar lo siguiente:
Sin
&
embargo, si se olvida , simplemente presione yCtrl-z
luego usebg
:FYI:
Ctrl-z
detiene el proceso de emacs y lobg
envía a un segundo plano.fuente
simplemente usando
&
como en$ x &
deja el proceso conectado a la terminal, cogí un pequeño programa llamadodetach
http://inglorion.net/software/detach/ que he alias yad
que es un poco comonohup
pero no deja atrás un archivo de registro i Úselo para separar mupdf :d mupdf x.pdf
fuente
Pon esto a tu
~/.bashrc
:Ahora no tiene que recordar qué programas son X11 y hacer manipulaciones especiales para ellos porque se separarán automáticamente. Tenga en cuenta que
setsid
es mejor quenohup
porque el último bloquea la señal HUP, que no es lo que necesita.PD: Ahora estás
winmine
listo en Linux.fuente