Uruchamiam aplikacje z terminala za pomocą takich poleceń:
/Applications/Mail.app/Contents/MacOS/Mail &
Ważną częścią jest &
.
W systemach Unix / Linux / Solaris:
- Nauczyłem się w szkole, że dodanie
&
programów sprawia, że program działa na własną rękę. - Zdecydowanie pamiętam uruchomienie polecenia podobnego
xeyes &
do tego, aby program działał bezpiecznie nawet po zamknięciu powłoki.
- Nauczyłem się w szkole, że dodanie
W systemie Mac OS X (wewnątrz systemu Unix):
- Uruchamiam aplikację za pomocą
&
i zamykam okno Terminal: aplikacja wychodzi! - Dlaczego takie niepożądane zachowanie występuje w systemie Mac OS X?
- Jak to może zostać naprawione ?
- Uruchamiam aplikację za pomocą
macos
terminal
applications
command-line
unix
Nicolas Barbulesco
źródło
źródło
Odpowiedzi:
„Standardowym” sposobem osiągnięcia tego, co chcesz osiągnąć (w OS X, a także w Linuksie, FreeBSD lub innych systemach) jest użycie polecenia
nohup
:To się uruchomi
program
, które będzie działać w tle względem powłoki z powodu&
- i zignoruje sygnały zawieszenia z powodu polecenia nohup.W ten sposób program będzie kontynuował działanie nawet po zamknięciu powłoki. Nie ma znaczenia, czy zamykasz powłokę, ponieważ zamykasz Terminal.app, czy zamykasz powłokę, ponieważ rozłączasz się z połączeniem ssh z komputerem lub podobnym.
źródło
nohup.out
w bieżącym folderze. Nawet gdy nie ma nic do napisania. Po kilku tygodniach będę mieć pliki nanohup.out
całym komputerze Mac. :-(nohup command>/dev/null&
lubcommand&disown
.Po zamknięciu okna terminala wysyła SIGHUP (sygnał rozłączenia) do powłoki, który następnie przesyła SIGHUP do wszystkich uruchomionych procesów . Jest to tradycyjne zachowanie bash i wielu innych powłok, a tradycyjnym rozwiązaniem jest użycie nohup.
Istnieją różne sposoby, w których różne maszyny uniksowe mogą się różnić, więc możliwe jest, że określone emulatory terminali lub używane powłoki były różne. Ale nie jest to specyficzne dla OS X. Na przykład w Ubuntu istnieje pytanie dotyczące tego samego problemu.
źródło
Używając znaku „
&
” i „ ”, mówisz Terminalowi, aby uruchomił proces w tle samej powłoki. Dlatego po zamknięciu powłoki (i zabiciu procesu) GUI (sama aplikacja Mail.app) również się zamknie.Prawidłowe polecenie uruchomienia poczty z terminala to po prostu:
Edycja: Właśnie to znalazłem na U&L Stack Exchange: Co oznacza ampersand na końcu linii skryptu powłoki? Odpowiedzi są doskonałe i dokładnie wyjaśniają, co się dzieje bardziej szczegółowo i lepiej niż kiedykolwiek mogłem! Bardzo polecam przeczytanie go.
źródło
/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
, ale na określonej ścieżce? W ten sposób:/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
Znalazłem rozwiązanie:
(/Applications/Mail.app/Contents/MacOS/Mail &)
To proste, ładne i działa!
Nawiasy
( )
uruchamiają polecenie w podpowłoce.źródło
@jksoegaard ma odpowiednie polecenia, ale jak wspomniano w komentarzu, tworzy plik nohup.out. Aby zatrzymać tworzenie pliku nohup.out, musisz przekierować STDOUT i STDERR w inne miejsce. Kompletne polecenie byłoby
nohup program &>/dev/null &
. Spowoduje to uruchomienie programu w tle, ignorowanie SIGHUP i wysyłanie wszystkich STDOUT i STDERR do / dev / null.Jeśli jednak nie pamiętasz dodania nohup (jak w oryginalnym pytaniu), możesz użyć
disown -arh
polecenia, aby oznaczyć wszystkie uruchomione zadania w tle, aby zignorować SIGHUP.źródło
Lub możesz spróbować
open -a /Applications/Mail.app
źródło
Znalazłem rozwiązanie: walkę ze złem ze złem.
Uruchamiam aplikację za pomocą tego rodzaju polecenia:
/Applications/Mail.app/Contents/MacOS/Mail & exit
Pocisk natychmiast wychodzi. A aplikacja przetrwa, nawet po zamknięciu okna terminalu.
Ale to rozwiązanie nie jest bardzo przydatne.
źródło
/Applications
pakiecie z moim komputerem Mac i nie są do niego dołączone..app
foldery nazywane są „pakietami”, aopen
polecenie może je uruchomić bez względu na to, czy znajdują się w/Applications
folderze, czy w innym folderze. Termin „pakiet” w tym kontekście nie oznacza „dostarczany z systemem OS X”.