Mantengo una aplicación que se ejecuta como un servicio en segundo plano, iniciada en el arranque como un StartupItem o manualmente desde la línea de comandos. Quiero saber cómo iniciarlo manualmente sin tener un terminal de control, o desconectarlo completamente después del lanzamiento.
Usando TextEdit para ilustrar, sé que si se inicia desde la Terminal, bloquea el aviso hasta que se cierra el programa, y se cerrará si la ventana del terminal está cerrada.
/Applications/TextEdit.app/Contents/MacOS/TextEdit
Ambos pueden evitarse agregando nohup
y &
al comando, respectivamente:
nohup /Applications/TextEdit.app/Contents/MacOS/TextEdit &
O se puede usar disown
en lugar de nohup
:
/Applications/TextEdit.app/Contents/MacOS/TextEdit & disown $!
Aunque TextEdit continuará ejecutándose si la ventana del terminal está cerrada, aún se emitirá una advertencia. Esto se debe a que TextEdit todavía tiene un terminal de control, como lo indica ps -ax
:
$ ps -ax | grep TextEdit
28390 ttys003 0:00.12 /Applications/TextEdit.app/Contents/MacOS/TextEdit
No es hasta que se cierra la ventana del terminal que TextEdit finalmente está libre de TTY.
$ ps -ax | grep TextEdit
28390 ?? 0:00.12 /Applications/TextEdit.app/Contents/MacOS/TextEdit
Sé que es posible iniciar el servicio sin un terminal de control con llamadas directas al sistema, porque cuando se usa el StartupItem para iniciar el servicio (ya sea en el arranque o con SystemStarter), se inicia sin un TTY. Mi pregunta es, ¿esto también se puede lograr usando solo la línea de comandos?