Uruchamianie procesu linux w tle

10

Próbuję utworzyć skrypt, który uruchamia niektóre programy

startup.sh

knetworkmanager
emesene
keepassx

Problem polega na tym, że kiedy uruchamiam skrypt, uruchamia on tylko knetworkmanager. Dzieje się tak, ponieważ rozpocznie się, a następnie zaczeka na zakończenie. Jak mogę uruchomić program bez czekania na niego? Nie sądzę, że mogę po prostu dodać „&” po każdym poleceniu, ponieważ wszystkie procesy nadal będą zabijane po zakończeniu skryptu.

Bart van Heukelom
źródło

Odpowiedzi:

16

Kiedy powłoka uruchamiająca skrypt kończy działanie, wysyła sygnał HUP do rozpoczętych procesów. Jeśli nie złapią sygnału, zakończą się. To, czy samo użycie & jest wystarczające, zależy od aplikacji. Aby być bezpiecznym, użyj nohup w ten sposób:

nohup your-program >>/dev/null 2>>/dev/null &

Zobacz strony podręcznika man dla nohup i zabij, aby uzyskać więcej informacji lub przeczytaj artykuł na Wikipedii o nohup .

Kim
źródło
Czytając ponownie, nie jest jasne, czy OP wychodzi z powłoki wywołującej, czy nie. Wspomina tylko o wyjściu ze skryptu, a nie o wyjściu z powłoki lub terminala.
Adam Bellaire,
czytając moją odpowiedź ponownie, zauważysz, że powiedziałem „kiedy powłoka uruchamiająca skrypt się kończy”. Zakładając, że ta powłoka ma własny terminal wirtualny (nie podpowłokę lub coś takiego), jest to poprawne.
Kim
@Kim: To prawda. Twoja odpowiedź jest w porządku, jestem pewien, czy OP zamyka powłokę wywołującą, czy nie.
Adam Bellaire,
10

Nie, procesy nie powinny zostać zabite po zakończeniu skryptu, jeśli używasz &. Spróbuj.

knetworkmanager &
emesene &
keepassx &
Adam Bellaire
źródło
2

Na podstawie podanych przez Ciebie programów przykładowych wygląda na to, że próbujesz uruchomić niektóre programy podczas uruchamiania KDE. Jeśli tak, spójrz na funkcję autostartu KDE. W tym artykule omówiono więcej i podano instrukcje dotyczące dodawania programów do automatycznego uruchamiania.

Doug Harris
źródło
Rzeczywiście, to właśnie staram się zrobić. Naprawiłem to teraz, dzięki.
Bart van Heukelom,
1

Jak powiedzieli inni, użyj &operatora, aby umieścić polecenie w tle podczas uruchamiania go przez powłokę.

Jeśli chcesz, aby części składowe działały w kolejności (zamiast współbieżnie), ale nadal chcesz, aby całość była w tle, użyj podpowłoki takiej jak ta:

(knetworkmanager; emesene; keepassx) &

lub, jeśli chcesz, aby działanie każdej części było uzależnione od pomyślnego ukończenia poprzedniej części, użyj:

(knetworkmanager && emesene && keepassx) &
dmckee --- były kot moderator
źródło
0

Dodanie „&” po każdym poleceniu na pewno zadziała. Oznaczałoby to, że te skrypty lub programy będą działały nawet po zakończeniu pliku startup.sh.


źródło
0

Inną opcją byłoby uruchomienie procesu jako demona, używając / sbin / start-stop-daemon

Abhinav
źródło