To jest poprawna odpowiedź. Bez żadnych zmian rozpoczęty proces jest nadal uważany za „potomek” procesu terminalnego, a zatem zostaje zakończony, jeśli terminal jest zamknięty.
Izzy
3
cmd & disowndziała również, ponieważ &traktowane jest jak ;separator poleceń. Polecenie disown usuwa połączenie między sesją powłoki bash a poleceniem w tle.
lornix,
2
zsh posiada skrót do tego: cmd &|.
Thor
Aby to zadziałało, musiałem zmienić preferencje w Terminal.app. W obszarze Profile wybierz aktywny profil, a następnie Powłoka> Po wyjściu z powłoki> Zamknij, jeśli powłoka została poprawnie wyjęta
antoine
6
Używanie screen:
screen -S <session name> -d -m <your command>
po tym możesz wyjść z terminala, a także ponownie podłączyć się do niego przez:
„nohup” jest już objęte zaakceptowaną odpowiedzią. I jestem prawie pewien, że pytający wspomniał o cronie, ponieważ używali go do powiedzenia „Uruchom to polecenie na kilka sekund w przyszłości”, a nie do okresowego uruchamiania.
David Richerby,
1
Moja odpowiedź nie pogarsza sytuacji. Widzę sens głosowania w dół. Neuron byłby wystarczający.
w tym przypadku, gdy terminal jest zamknięty, proces rozpoczyna się /home/your/script.sh- ponieważ nie został odłączony od swojego „rodzica”, ale po prostu „w tle”. Użyj, nohupaby odłączyć go naprawdę.
Izzy
Szkoda, nie wiedziałem o tym, ale kiedy testowałem na moim Debianie, polecenie kontynuowało wykonywanie po zamknięciu powłoki, która go uruchomiła: /
Flinth
1
Nie jestem pewien, gdzie dokładnie i kiedy jest dołączony proces w tle. Ale jeśli np. Zalogujesz się na maszynie zdalnej, zostanie ona z pewnością zatrzymana natychmiast po wylogowaniu (z wyjątkiem sytuacji, gdy zdemonizuje się sama). Tak więc, aby mieć 100% pewności, wolisz użyć nohup- która rejestruje również wszystkie (teraz niewidoczne) dane wyjściowe w pliku o nazwie nohup.outznajdującym się w katalogu, z którego uruchomiono polecenie.
Izzy
Dobrze, dziękuję za wyjaśnienia ^^
Flinth
Ta odpowiedź może działać poprawnie w połączeniu z jobspoleceniem. Dość często chcę móc powrócić do procesu powłoki po tle.
Odpowiedzi:
Aby uniknąć propagacji sygnałów wyjściowych do procesów potomnych terminala i powłoki, uruchom polecenie za pomocą
nohup
, tj .:źródło
cmd & disown
działa również, ponieważ&
traktowane jest jak;
separator poleceń. Polecenie disown usuwa połączenie między sesją powłoki bash a poleceniem w tle.cmd &|
.Używanie
screen
:po tym możesz wyjść z terminala, a także ponownie podłączyć się do niego przez:
Więcej informacji: odniesienie
źródło
Jeśli chcesz uruchamiać określone polecenie lub plik co sekundę w tle po wyjściu z terminala, możesz wypróbować tę łatwą drobiazg;
To uruchamiałoby scipt.sh co 5 sekund.
źródło
Po swoim poleceniu umieść znak „&”.
na przykład:
źródło
/home/your/script.sh
- ponieważ nie został odłączony od swojego „rodzica”, ale po prostu „w tle”. Użyj,nohup
aby odłączyć go naprawdę.nohup
- która rejestruje również wszystkie (teraz niewidoczne) dane wyjściowe w pliku o nazwienohup.out
znajdującym się w katalogu, z którego uruchomiono polecenie.jobs
poleceniem. Dość często chcę móc powrócić do procesu powłoki po tle.