Starten eines Linux-Prozesses im Hintergrund


10

Ich versuche ein Skript zu erstellen, das einige Programme startet

startup.sh

knetworkmanager
emesene
keepassx

Das Problem ist, dass beim Ausführen des Skripts nur knetworkmanager gestartet wird. Das liegt daran, dass es gestartet wird und dann gewartet wird, bis es fertig ist. Wie kann ich ein Programm starten, ohne darauf zu warten? Ich glaube nicht, dass ich einfach "&" nach jedem Befehl hinzufügen kann, da alle Prozesse immer noch abgebrochen werden, wenn das Skript beendet ist.

Antworten:


15

Wenn die Shell, die das Skript ausführt, beendet wird, sendet sie ein HUP-Signal an die von Ihnen gestarteten Prozesse. Wenn diese das Signal nicht empfangen, werden sie beendet. Ob die Verwendung von & ausreicht, hängt von der Anwendung ab. Um sicher zu gehen, benutze nohup wie folgt:

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

Weitere Informationen finden Sie auf den Manpages zu nohup und kill oder im Wikipedia-Artikel zu nohup .


Beim erneuten Lesen ist es nicht eindeutig, ob OP die aufrufende Shell verlässt oder nicht. Er erwähnt nur das Verlassen des Skripts, nicht das Verlassen der Shell oder des Terminals.
Adam Bellaire

Wenn Sie meine Antwort noch einmal lesen, werden Sie feststellen, dass ich gesagt habe, dass die Shell, in der das Skript ausgeführt wird, beendet wird. Angenommen, diese Shell verfügt über ein eigenes virtuelles Terminal (keine Subshell oder ähnliches), ist dies korrekt.
Kim

@Kim: Das stimmt. Ihre Antwort ist in Ordnung, ich bin mir nur sicher, ob das OP die aufrufende Shell schließt oder nicht.
Adam Bellaire

10

Nein, die Prozesse sollten nicht abgebrochen werden, wenn das Skript beendet ist, wenn Sie es verwenden &. Versuch es.

knetworkmanager &
emesene &
keepassx &

2

Anhand der von Ihnen angegebenen Beispielprogramme sieht es so aus, als würden Sie versuchen, einige Programme zu starten, wenn KDE gestartet wird. Wenn ja, werfen Sie einen Blick auf die Autostart-Funktion von KDE. Dieser Artikel enthält weitere Informationen und Anweisungen zum Hinzufügen von Programmen zum Autostart.


Genau das versuche ich zu tun. Ich habe es jetzt behoben, danke.
Bart van Heukelom

1

Verwenden Sie, wie bereits gesagt, den &Operator, um einen Befehl in den Hintergrund zu stellen, wenn die Shell ihn ausführt.

Wenn Sie möchten, dass die Komponententeile in der richtigen Reihenfolge (und nicht gleichzeitig) ausgeführt werden, das Ganze jedoch im Hintergrund angezeigt wird, verwenden Sie eine Unterschale wie die folgende:

(knetworkmanager; emesene; keepassx) &

oder, wenn Sie den Betrieb jedes Teils von der erfolgreichen Fertigstellung des vorherigen Teils abhängig machen möchten, verwenden Sie:

(knetworkmanager && emesene && keepassx) &

0

Das Hinzufügen eines '&' nach jedem Befehl wird definitiv funktionieren. Dies würde bedeuten, dass diese Skripte oder Programme auch nach Abschluss von startup.sh weiter ausgeführt werden.


0

Eine andere Möglichkeit wäre, den Prozess als Dämon mit / sbin / start-stop-daemon zu starten

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.