Come avviare manualmente un servizio senza avere un terminale di controllo?

2

Gestisco un'applicazione che viene eseguita come servizio in background, avviata all'avvio come StartupItem o manualmente dalla riga di comando. Voglio sapere come avviarlo manualmente senza avere un terminale di controllo, o completamente staccare dopo l'avvio.

Usando TextEdit per illustrare, so che se è lanciato da Terminal, blocca il prompt finché il programma non si chiude, e si chiuderà se la finestra del terminale è chiusa.

/Applications/TextEdit.app/Contents/MacOS/TextEdit

Entrambi possono essere evitati aggiungendo nohup e & al comando, rispettivamente:

nohup /Applications/TextEdit.app/Contents/MacOS/TextEdit &

Oppure disown può essere utilizzato al posto di nohup :

/Applications/TextEdit.app/Contents/MacOS/TextEdit & disown $!

Anche se TextEdit resterà in esecuzione se la finestra del terminale è chiusa, verrà comunque visualizzato un avviso. Questo perché TextEdit ha ancora un terminale di controllo, come indicato da ps -ax :

$ ps -ax | grep TextEdit
28390 ttys003    0:00.12 /Applications/TextEdit.app/Contents/MacOS/TextEdit

Finché la finestra del terminale non sarà chiusa, TextEdit è finalmente privo di TTY.

$ ps -ax | grep TextEdit
28390 ??         0:00.12 /Applications/TextEdit.app/Contents/MacOS/TextEdit

So che è possibile avviare il servizio senza un terminale di controllo con chiamate di sistema dirette, perché quando StartupItem viene utilizzato per avviare il servizio (all'avvio o con SystemStarter), viene avviato senza un TTY. La mia domanda è, questo può anche essere realizzato utilizzando solo la riga di comando?

    
posta Eric3 30.01.2014 - 21:04
fonte

0 risposte

Leggi altre domande sui tag