Wie kann ich einem bereits laufenden Prozess einen zusätzlichen „Shutdown“-Befehl hinzufügen?

Wie kann ich einem bereits laufenden Prozess einen zusätzlichen „Shutdown“-Befehl hinzufügen?

Ich vergesse regelmäßig, && shutdown -h noweinen lang laufenden Prozess zu ergänzen. Gibt es eine Möglichkeit, einen shutdown -h nowBefehl 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.

  1. Starten Sie den Vorgang.
  2. Mir ist klar geworden, dass ich vergessen habe, meinen Befehl auszuführen &&.
  3. Drücken Sie Ctrl+, Zum den Vorgang anzuhalten und zur Shell zurückzukehren.
  4. Rennen fg && shutdown -h nowzu:
    1. Stellen Sie den gerade angehaltenen Prozess in den Vordergrund und setzen Sie ihn fort.
    2. 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 grepAusdruck. Dadurch wird sichergestellt, dass der grepProzess 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.txtund das Programm erledigt beides für Sie.

verwandte Informationen