10 votos

Cómo evitar que la aplicación se lanzó en la Terminal de indeseablemente salir?

Puedo lanzar aplicaciones desde la Terminal con los comandos como este :

/Applications/Mail.app/Contents/MacOS/Mail &

La parte importante es el &.

  • Para Unix / Linux / Solaris :

    • He aprendido en la escuela que la adición de la & hace que el programa vivir por sus propios medios.
    • Estoy totalmente de recordar el lanzamiento de un comando como xeyes & y que el programa se ejecuta de manera segura, incluso después de cerrar la shell.
  • En Mac OS X (Unix en el interior) :

    1. Puedo iniciar una aplicación con & y cerrar la ventana de Terminal : sale de la aplicación !
    2. ¿Por qué este comportamiento indeseable suceder en Mac OS X ?
    3. Cómo puede ser fijo ?

8voto

Jose Chavez Puntos 645

El "estándar" de manera de lograr lo que se quiere lograr (en OS X, así como en Linux, FreeBSD o de otros sistemas) es usar el comando nohup:

nohup program &

Esto iniciará program, que se ejecutará en segundo plano en relación a la shell a causa de la & - y va a ignorar colgar las señales debido a la nohup comando.

De esta manera, el programa seguirá funcionando aunque se cierre el shell. No importa si estás cerrando la shell porque eres el cierre de la Terminal.aplicación, o estás cerrando la shell porque son la desconexión de una conexión ssh al equipo, o similar.

6voto

Goldorak84 Puntos 116

Mediante el signo "&", le está diciendo a la Terminal para ejecutar el proceso en el fondo de la propia concha. Por lo tanto, al cerrar la shell (y matar el proceso), la interfaz gráfica de usuario (Correo electrónico.la propia aplicación), se cierran también.

El comando correcto para lanzar el Correo desde la terminal es simplemente:

open -a Mail; exit

Edit: acabo de encontrar esto en más de U&L Intercambio de la Pila: ¿Qué signo decir, al final de una secuencia de comandos de shell de la línea? Las respuestas son excelentes y explicar exactamente lo que está pasando en más detalle y mejor de lo que yo jamás podría! Te recomiendo la lectura a través de ella.

6voto

Ido Schacham Puntos 1373

Cuando se cierra una ventana de terminal, envía un SIGHUP (hangup de la señal) a la shell, que luego envía SIGHUP a todos los procesos que se inició. Este es el comportamiento tradicional de bash y muchos otros shells, y la solución tradicional a este problema es el uso de nohup.

Hay formas en que las diferentes máquinas Unix puede variar, así que es posible que los emuladores de terminal que utiliza, o el específico de los depósitos que se utiliza se comportaba diferente. Pero no es específico para OS X. Por ejemplo, hay una pregunta sobre este mismo tema en Ubuntu.

4voto

artvolk Puntos 199

He encontrado la solución :

(/Applications/Mail.app/Contents/MacOS/Mail &)

Es simple, es bastante, y funciona !

El paréntesis ( ) ejecutar el comando en una sub-shell.

3voto

Lockie Puntos 636

@jksoegaard tiene los comandos adecuados, pero como usted menciona en el comentario, se crea un nohup.en el archivo. Para detener el nohup.en el archivo que se va a crear, debe redirigir STDOUT y STDERR en algún otro lugar. El comando completo sería nohup program &>/dev/null &. Esto ejecutará el programa en el fondo, ignorando el SIGHUP, y el envío de todos los STDOUT y STDERR a /dev/null.

Sin embargo, si usted no recuerda agregar nohup (como en tu pregunta original), puede utilizar la disown -arh comando para marcar todos los trabajos en ejecución en segundo plano para ignorar la SIGHUP.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X