
Ich vergesse regelmäßig, && shutdown -h now
einen lang laufenden Prozess zu ergänzen. Gibt es eine Möglichkeit, einen shutdown -h now
Befehl hinzuzufügen?nachder erste Befehl wurde aufgerufen? Es ist nicht beabsichtigt, den laufenden Prozess zu unterbrechen. Vielleicht ist es möglich, die PID zu beobachten?
Antwort1
Es ist nicht nötig, ps wiederholt auszuführen, um alle Prozesse aufzulisten und die Ausgabe zu durchsuchen. Bringen Sie den Prozess mit Strg-Z in den Hintergrund und führen Sie dann
bg %1 ; wait %1 ; shutdown -h now
Wenn Sie andere Hintergrundjobs laufen haben, wird Ihnen beim Drücken von Strg+Z anstelle von [1] eine andere Jobspec zugewiesen. Verwenden Sie in diesem Fall diese.
Antwort2
Ich mache das ständig.
- Starten Sie den Vorgang.
- Mir ist klar geworden, dass ich vergessen habe, meinen Befehl auszuführen
&&
. - Drücken Sie Ctrl+, Zum den Vorgang anzuhalten und zur Shell zurückzukehren.
- Rennen
fg && shutdown -h now
zu:- Stellen Sie den gerade angehaltenen Prozess in den Vordergrund und setzen Sie ihn fort.
- Wenn es fertig ist, wird ausgeführt, was Sie ausführen wollten.
Alternativ können Sie eine Umfrage durchführen, wie in anderen Antworten vorgeschlagen, etwa dieser:
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
Antwort3
Sie können beispielsweise Folgendes tun. Dabei wird alle 5 Sekunden geprüft, ob der Prozess ausgeführt wird, und es werden entsprechende Maßnahmen ergriffen:
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
Beachten Sie die eckigen Klammern im grep
Ausdruck. Dadurch wird sichergestellt, dass der grep
Prozess nicht abgeglichen wird, wenn er in der Liste landet ps
. Es reicht aus, jedes einzelne Zeichen in eckige Klammern zu setzen.
Antwort4
Erstellen Sie ein Shell-Skript, um beide Prozesse auszuführen:
MyShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
Nachdem Sie dies in dem Verzeichnis gespeichert haben, in dem Sie den angegebenen Prozess starten, führen Sie Folgendes aus:
chmod +x MyShellScript.txt
Wenn Sie den Befehl dann ausführen möchten, geben Sie ihn einfach ein ./MyShellScript.txt
und das Programm erledigt beides für Sie.