Ich verwende oft bash
Shell-Skripte, um einfache Befehle für viele verschiedene Dateien auszuführen. Angenommen, dass ich den folgenden habe bash
Shell - Skript, genannt script.sh
, die das Programm / Befehl läuft foo
auf drei Textdateien "a.txt"
, "b.txt"
, "c.txt"
:
#!/bin/bash
for strname in "a" "b" "c"
do
foo $strname".txt"
done
Angenommen, dies foo $strname".txt"
ist langsam, sodass die Ausführung des Skripts viel Zeit in Anspruch nimmt (z. B. Stunden oder Tage). Aus diesem Grund möchte ich verwenden nohup
, dass die Ausführung auch dann fortgesetzt wird, wenn das Terminal geschlossen oder nicht verbunden ist. Ich möchte auch, dass das Skript sofort in den Hintergrund tritt, also verwende ich den &
Operator. Daher werde ich den folgenden Befehl zum Aufrufen verwenden script.sh
:
nohup bash script.sh &
Dies funktioniert einwandfrei, wenn das Skript im Hintergrund und ohne Auflegen ausgeführt wird. Angenommen, ich möchte die Ausführung aus irgendeinem Grund irgendwann abbrechen. Wie kann ich das machen?
Das Problem, auf das ich gestoßen bin, ist, dass ich beim Betrachten top
nur das foo
Entsprechende sehe "a.txt"
. Ich kann diesen foo
Anruf beenden , aber dann wird das foo
entsprechende "b.txt"
angerufen, und dann muss ich das auch beenden, und so weiter. Für Dutzende oder Hunderte von Textdateien, die in der for
Schleife angegeben sind, wird es zum Schmerz, jede nach der anderen zu beenden foo
! Irgendwie muss ich stattdessen das Shell-Skript selbst beenden , nicht die speziellen Aufrufe, die vom Shell-Skript ausgegeben werden.
Wenn ich den Befehl eingebe
ps -u myusername
Wo myusername
ist mein Benutzername? Ich erhalte eine Liste der Prozesse, die ich ausführe. Ich sehe aber zwei unterschiedliche Prozess-IDs aufgerufen bash
. Woher weiß ich, welcher dieser Prozesse meinem ursprünglichen Aufruf entspricht nohup bash script.sh &
?
for s in a b c; do foo "$s".txt; done
nohup
bis Sie eine Prozessauflistung aufrufen, um den von Ihnen gestarteten Job anzuzeigen, ist das lange vorbei. Sie können sich die Spalte "Nizza" in der ps
Ausgabe ansehen, aber die Antworten hier sind nützlicher.