Lassen Sie uns eine mysteriöse Welt im Linux-Betriebssystem erkunden – im Hintergrund ausgeführt. Im täglichen Gebrauch müssen wir häufig die Ausführung im Hintergrund nutzen, um Aufgaben stillschweigend im Hintergrund ausführen zu lassen, ohne unsere aktuelle Arbeit zu beeinträchtigen. Wie implementiert man den Hintergrundbetrieb unter Linux?
Denken
Zunächst müssen wir uns mit der Frage befassen, warum das Hintergrundprogramm beendet wird, wenn Sie das Terminal direkt schließen. Das Terminal sendet ein SIGHUP-Signal an die in der aktuellen Umgebung gestarteten Hintergrundaufgaben , wodurch das laufende Programm hängen bleibt. Ignorieren Sie dann einfach das SIGHUP.
nohup
Der am häufigsten verwendete Befehl ist [nohup]. Anhand des Namens können Sie erkennen, ob er die Ausführung des Befehls unterbricht, das Terminal schließt oder sich von einem Konto abmeldet. Er muss auch weiterhin ausgeführt werden das Symbol.
Verwendung: nohup Command [ Arg … ] [ & ]
$ nohup sh test.sh & # 直接关闭当前终端,再打开一个查看 $ ps -few|grep test.sh
Wie oben zu sehen ist, ist der übergeordnete Prozess von test.sh, den wir ausführen, zu [PID 1] geworden und wird vom Linux-Hauptprozess übernommen.
setsid
nohup bedeutet, das SIGHUP-Signal zu ignorieren. Gibt es noch andere Ideen?
Der Befehl setip kann die Sitzung erneut öffnen, die ID der übergeordneten Prozessgruppe erben und sich der Kontrolle des übergeordneten Prozesses entziehen. Wie Sie in der Abbildung unten sehen können, ist der übergeordnete Prozess des test.sh-Skripts bereits init 1. Zu diesem Zeitpunkt hat er unabhängig vom Schließen oder Verlassen des Terminals nichts mit dem Hintergrundprogramm zu tun.
$ setsid sh test.sh
Ein weiterer Unterschied zwischen setsid und nohup besteht darin, dass das &-Hintergrundsymbol nicht verwendet werden muss.
Ausgang
Verwenden Sie den Exit-Befehl, um das Terminal zu verlassen, aber unser Programm wird weiterhin ausgeführt. Warum ist das so?
Dies liegt daran, dass beim Verlassen des Terminals mit dem Befehl „exit“ das SIGHUP-Signal nicht an die Aufgabe gesendet wird, zu der das Terminal gehört. Es wird durch das Konfigurationselement „huponexit“ gesteuert. Sie können den Befehl „shopt“ verwenden Schau es dir an.
[root@api ~]# shopt |grep huponexit huponexit off
Konfigurieren Sie huponexit auf „Ein“, verwenden Sie zum Beenden erneut den Exit-Befehl, und die entsprechenden Aufgaben werden entsprechend beendet.
[root@api ~]# shopt -s huponexit [root@api ~]# shopt |grep huponexit huponexit on
Falle
Der Befehltrap ist ein in Linux integrierter Befehl, der beim Empfang des angegebenen Signals ausgeführt werden soll, gefolgt vom zu verarbeitenden Signalnamen:
Wenn ein Skript im Hintergrund ausgeführt werden muss und wir nicht möchten, dass das Terminal das Programm beendet und schließt, können wir dem Skript den Trap-Befehl hinzufügen, um das SIGHUP-Signal zu ignorieren (den Prozess anzuhalten).
#!/bin/sh trap "" HUP while true;do date >> /root/test.txt sleep 1 done
Der Linux-Befehl screen wird für Multi-Window-Verwaltungsprogramme verwendet. Er kann ein Terminal erstellen und das Programm darin ausführen lassen
screen sh test.sh &
Das obige ist der detaillierte Inhalt vonErkunden Sie die mysteriöse Welt der Hintergrundoperationen unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!