Arka plan hizmeti olarak çalışan, önyüklemede StartupItem olarak veya el ile komut satırından başlayan bir uygulamayı sürdürüyorum. Kontrol terminali olmadan manuel olarak nasıl başlatılacağını bilmek veya başlattıktan sonra tamamen çıkarmak istiyorum.
Göstermek için TextEdit kullanarak, Terminal'den başlatılırsa, programdan çıkılana kadar istemi engellediğini ve terminal penceresi kapalıysa kapanacağını biliyorum.
/Applications/TextEdit.app/Contents/MacOS/TextEdit
Her ikisine de sırasıyla komut ekleyerek nohup
ve &
komutları kullanarak önlenebilir :
nohup /Applications/TextEdit.app/Contents/MacOS/TextEdit &
Veya disown
yerine kullanılabilir nohup
:
/Applications/TextEdit.app/Contents/MacOS/TextEdit & disown $!
Terminal penceresi kapalıysa TextEdit'in çalışmaya devam etmesine rağmen, yine de bir uyarı verilir. Bunun nedeni, TextEdit'in aşağıdakilerle gösterildiği gibi hala bir kontrol terminaline sahip olmasıdır ps -ax
:
$ ps -ax | grep TextEdit
28390 ttys003 0:00.12 /Applications/TextEdit.app/Contents/MacOS/TextEdit
Terminal penceresi kapanana kadar değil, TextEdit'in sonunda TTY'siz olduğu kesin.
$ ps -ax | grep TextEdit
28390 ?? 0:00.12 /Applications/TextEdit.app/Contents/MacOS/TextEdit
Doğrudan sistem çağrılarıyla kontrol terminali olmadan servisi başlatmanın mümkün olduğunu biliyorum, çünkü StartupItem hizmeti başlatmak için kullanıldığında (önyüklemede veya SystemStarter ile), bir TTY olmadan başlar. Sorum şu, bu sadece komut satırı kullanılarak da yapılabilir mi?