GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gibt es eine Möglichkeit, den Prozess zu hören?

Ein – zugegebenermaßen schwerfälliger – Ansatz ist die Verwendung von strace :

$ strace -e trace=none -e signal=none -p 12345

überwacht den Prozess mit PID 12345 und fängt keinen Systemaufruf ab (zuerst -e ) und keine Signale (zweite -e ). Sobald der Prozess regulär beendet wird, wird der Exit-Wert gedruckt.

Wenn der Prozess durch ein Signal beendet wird, wird strace stillschweigend beendet (wenn es mit den oben angegebenen Optionen ausgeführt wird). Sie können z. -e signal=kill dieses Verhalten zu ändern. Beachten Sie jedoch, dass -e signal=all (oder entsprechend das Weglassen des -e signal Option) kann eine große Ausgabemenge erzeugen, wenn Signale empfangen und vom Programm verarbeitet werden.


  1. Verkettung der Ausführung von "notify"

    $ process; notify $? &
    

    Beachten Sie, dass, wenn der Prozess auf unerwartete Weise beendet wird notify wird nicht ausgeführt

  2. Fallen aufstellen

    Prozess wird durch Signale unterschiedlicher Bedeutung signalisiert und kann entsprechend reagieren

    #!/bin/bash
    
    process
    
    function finish {
        notify $?
    }
    trap finish EXIT
    

Sie sind sich nicht sicher, welche Benachrichtigung Sie meinen. Im Wesentlichen kann es natürlich alles sein, was eine "Glocke" läutet. Einer für viele zB. notify-send ab libnotify Bibliothek.

$ process; notify-send "process finished with status $?" &

Bash erledigt dies für Sie. Es wird Sie benachrichtigen, wenn der Prozess endet, indem es Ihnen die Kontrolle zurückgibt, und es speichert den Ausgangsstatus in der speziellen Variable $? . Es sieht ungefähr so ​​aus:

someprocess
echo $?

Weitere Informationen finden Sie im Bash-Handbuch zu speziellen Parametern.

Aber ich nehme an, dass Sie während des Wartens andere Arbeiten erledigen möchten. In Bash können Sie das so machen:

someprocess &
otherwork
wait %+
echo $?

someprocess & startet den Vorgang im Hintergrund. Das bedeutet, dass die Kontrolle sofort zurückkehrt und Sie andere Arbeiten erledigen können. Ein im Hintergrund gestarteter Prozess wird in der Bash als Job bezeichnet. wait wartet, bis der angegebene Job beendet ist, und gibt dann den Beendigungsstatus dieses Jobs zurück. Jobs werden durch %n referenziert . %+ bezieht sich auf den zuletzt gestarteten Job. Weitere Informationen finden Sie im Bash-Handbuch zur Jobsteuerung.

Wenn Sie die PID wirklich brauchen, können Sie es auch so machen:

someprocess &
PID=$!
otherwork
wait $PID
echo $?

$! ist eine spezielle Variable, die die PID des zuletzt gestarteten Hintergrundprozesses enthält.


Linux
  1. Der tragbare (posix) Weg zur Prozesssubstitution?

  2. Gibt es eine Möglichkeit, die Umgebungsvariablen eines anderen Prozesses in Unix zu ändern?

  3. Gibt es eine Möglichkeit, den Befehlsprozess für fehlerhafte scp-Befehle (sichere Kopie) in Linux fortzusetzen?

  4. Gibt es eine Möglichkeit, eine NETCDF-Datei zuzuschneiden?

  5. Gibt es eine Möglichkeit, vim im schreibgeschützten Modus zu starten?

Gibt es eine Möglichkeit, den aktuellen rpath unter Linux zu überprüfen?

Gibt es eine Möglichkeit, von UTF8 nach ISO-8859-1 zu konvertieren?

Gibt es eine Möglichkeit, ein Cargo-Projekt umzubenennen?

Gibt es eine Möglichkeit, Badblocks neu zu starten?

Wie lernt man SELinux am besten?

Gibt es eine Möglichkeit, in `ps` nach mehreren Bedingungen auszuwählen?