Ich habe ein Skript, das eine Reihe von Hintergrundprozessen startet und einwandfrei funktioniert, wenn es über die Befehlszeile aufgerufen wird.
Das gleiche Skript wird jedoch auch beim Start meiner Xsession und zusätzlich bei einigen Udev-Ereignissen aufgerufen. In beiden Fällen verschwinden die Hintergrundprozesse.
Ich habe sleep 10 in das Skript eingefügt und konnte sehen, dass die Hintergrundprozesse zwar gestartet werden, aber sobald das Skript existiert, nimmt es die Hintergrundprozesse mit. Ich habe versucht, das Problem zu lösen, indem ich die Hintergrundprozesse mit aufgerufen habe start_stop_deamon --background
, aber das macht keinen Unterschied. Ich kann das Skript jedoch von einer Konsole aus aufrufen und die Sitzung beenden, und die Hintergrundprozesse laufen immer noch.
Abgesehen davon, dass ich mein unmittelbares Problem beheben möchte (obwohl ich für jede Hilfe dankbar wäre), möchte ich die Logik dahinter verstehen. Ich vermute, dass etwas mit dem Fehlen eines Terminals zusammenhängt.
Antwort1
Schützen Sie Ihre Prozesse mit nohup
:
nohup command-name &
Sie können diese Technik auch verwenden, wenn Sie die Umleitung von stdout und stderr zu nohup.out ignorieren möchten:
command-name & disown