Ich starte Anwendungen vom Terminal aus mit Befehlen wie diesem:
/Applications/Mail.app/Contents/MacOS/Mail &
Der wichtige Teil ist die &
.
Für Unix / Linux / Solaris:
- Ich habe in der Schule gelernt, dass das Hinzufügen von
&
macht das Programm selbstständig. - Ich kann mich sehr gut daran erinnern, einen Befehl wie
xeyes &
und das Programm läuft sicher, auch nachdem ich die Shell geschlossen habe.
- Ich habe in der Schule gelernt, dass das Hinzufügen von
Unter Mac OS X (Unix inside):
- Ich starte eine App mit
&
und ich schließe das Terminal-Fenster: Die Anwendung wird beendet! - Warum tritt dieses unerwünschte Verhalten unter Mac OS X auf?
- Wie kann das behoben werden?
- Ich starte eine App mit
macos
terminal
applications
command-line
unix
Nicolas Barbulesco
quelle
quelle
Antworten:
Die "Standard" -Methode, um das zu erreichen, was Sie erreichen möchten (unter OS X sowie unter Linux, FreeBSD oder anderen Systemen), ist die Verwendung des Befehls
nohup
:Das wird beginnen
program
, die wegen der im Hintergrund relativ zur Shell laufen&
- und ignoriert Hangup-Signale aufgrund des Befehls nohup.Auf diese Weise läuft das Programm weiter, obwohl Sie die Shell schließen. Es spielt keine Rolle, ob Sie die Shell schließen, weil Sie Terminal.app schließen, oder ob Sie die Shell schließen, weil Sie die Verbindung zu einem SSH-Computer oder ähnlichem trennen.
quelle
nohup.out
im aktuellen Ordner. Auch wenn es nichts zu schreiben gibt. Nach ein paar Wochen hätte ich Dateiennohup.out
überall in meinem Mac. :-(nohup command>/dev/null&
odercommand&disown
.Wenn Sie ein Terminalfenster schließen, sendet es ein SIGHUP (Hangup-Signal) an die Shell sendet SIGHUP an alle gestarteten Prozesse . Dies ist ein traditionelles Verhalten für Bash und viele andere Shells. Die traditionelle Lösung hierfür ist die Verwendung von Nohup.
Es gibt verschiedene Möglichkeiten, wie sich verschiedene Unix-Maschinen unterscheiden können. Daher ist es möglich, dass sich die von Ihnen verwendeten Terminalemulatoren oder die von Ihnen verwendeten Shells unterschiedlich verhalten haben. Es ist jedoch nicht OS X-spezifisch. Beispielsweise gibt es unter Ubuntu zu diesem Thema eine Frage.
quelle
Verwenden des kaufmännischen Und "
&
", weisen Sie Terminal an, den Prozess im Hintergrund der Shell selbst auszuführen. Wenn Sie die Shell schließen (und den Prozess beenden), wird die GUI (Mail.app selbst) ebenfalls geschlossen.Der richtige Befehl zum Starten von Mail über das Terminal lautet einfach:
Bearbeiten: Ich habe dies gerade bei U & amp; L Stack Exchange gefunden: Was bedeutet kaufmännisches Und am Ende einer Shell-Skriptzeile? Die Antworten sind ausgezeichnet und erklären das, was los ist, genauer und besser als ich es je könnte! Ich empfehle es durchzulesen.
quelle
/Users/nicolas/Desktop/Firefox-29-fr/Firefox.app/Contents/MacOS/firefox -profile "/Users/nicolas/Desktop/Firefox-29-fr/Profil-Firefox-29-fr/" -no-remote &
/Applications
, aber auf einem bestimmten Weg? So was :/Users/nicolas/Desktop/Firefox-29-fr/Firefox.app/Contents/MacOS/firefox -profile "/Users/nicolas/Desktop/Firefox-29-fr/Profil-Firefox-29-fr/" -no-remote &
open -a Applications/Mail.app/Contents/MacOS/Mail; exit
@jksoegaard hat die richtigen Befehle, aber wie Sie im Kommentar erwähnt haben, wird eine Datei nohup.out erstellt. Um die Erstellung der Datei nohup.out zu stoppen, müssen Sie STDOUT und STDERR an eine andere Stelle umleiten. Der vollständige Befehl wäre
nohup program &>/dev/null &
. Dadurch wird Ihr Programm im Hintergrund ausgeführt, das SIGHUP ignoriert und alle STDOUT- und STDERR-Werte an / dev / null gesendet.Wenn Sie jedoch nicht daran gedacht haben, nohup hinzuzufügen (wie in Ihrer ursprünglichen Frage), können Sie das verwenden
disown -arh
Befehl zum Markieren aller im Hintergrund ausgeführten Jobs, um die REGISTRIERUNG zu ignorieren.quelle
Ich habe die Lösung gefunden:
(/Applications/Mail.app/Contents/MacOS/Mail &)
Es ist einfach, es ist hübsch und es funktioniert!
Die Klammern
( )
Starten Sie den Befehl in einer Sub-Shell.quelle
Oder du kannst es versuchen
open -a /Applications/Mail.app
quelle
Ich habe eine Lösung gefunden: das Böse mit dem Bösen bekämpfen.
Ich starte meine App mit diesem Befehl:
/Applications/Mail.app/Contents/MacOS/Mail & exit
Die Shell wird sofort beendet. Und die App überlebt, auch wenn ich das Terminalfenster schließe.
Diese Lösung ist jedoch nicht sehr praktisch.
quelle
/Applications
und nicht mit meinem Mac gebündelt..app
Ordner heißen "Bundles", und dieopen
Befehl kann sie starten, ob sie in der sind/Applications
Ordner oder einen anderen Ordner. Der Begriff "Bundle" bedeutet in diesem Zusammenhang nicht "Auslieferung mit OS X".