He buscado esto antes, pero nunca he podido encontrar una respuesta.
En Windows, si tengo una ventana de consola abierta, escriba winminey 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 emacsy 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,detaches 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+Cen 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á
someprogramen una nueva sesión.fuente
Intenta escribir
xemacs ¶ 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-zluego usebg:FYI:
Ctrl-zdetiene el proceso de emacs y lobgenvía a un segundo plano.fuente
simplemente usando
&como en$ x &deja el proceso conectado a la terminal, cogí un pequeño programa llamadodetachhttp://inglorion.net/software/detach/ que he alias yadque es un poco comonohuppero no deja atrás un archivo de registro i Úselo para separar mupdf :d mupdf x.pdffuente
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
setsides mejor quenohupporque el último bloquea la señal HUP, que no es lo que necesita.PD: Ahora estás
winminelisto en Linux.fuente