Heim  >  Artikel  >  Backend-Entwicklung  >  Gibt es eine zuverlässige Möglichkeit, die Prozessexistenz in Go zu bestimmen?

Gibt es eine zuverlässige Möglichkeit, die Prozessexistenz in Go zu bestimmen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-06 22:34:02976Durchsuche

Is There a Reliable Way to Determine Process Existence in Go?

Bestimmen der Prozessexistenz in Go mithilfe von os.FindProcess

Die Verwendung von os.FindProcess kann zwar Informationen über die Existenz eines Prozesses liefern, ist jedoch nicht ganz zuverlässig um festzustellen, ob ein Prozess beendet oder beendet wurde.

Nutzung des Unix-Ansatzes

Traditionell wird der Unix-Befehl kill -s 0 [PID] verwendet, um zu überprüfen, ob ein Prozess läuft noch. Dieser Ansatz sendet ein Signal von 0 an den Prozess, ohne dass tatsächlich ein Signal gesendet wird. Stattdessen dient es als Möglichkeit, die Existenz des Prozesses zu überprüfen.

Implementierung in Go

Bei der Übersetzung dieser Methode in Go zeigt der folgende Code, wie man ermittelt, ob ein Prozess vorliegt ist noch aktiv:

import (
    "fmt"
    "log"
    "os"
    "os/exec"
    "strconv"
    "syscall"
)

func main() {
    for _, p := range os.Args[1:] {
        pid, err := strconv.ParseInt(p, 10, 64)
        if err != nil {
            log.Fatal(err)
        }
        process, err := os.FindProcess(int(pid))
        if err != nil {
            fmt.Printf("Failed to find process: %s\n", err)
        } else {
            err := process.Signal(syscall.Signal(0))
            fmt.Printf("process.Signal on pid %d returned: %v\n", pid, err)
        }
    }
}

Beispielausgabe

Das Ausführen dieses Codes liefert die folgende Ausgabe, die den Status von Prozessen mit unterschiedlichen IDs angibt:

$ ./kill 1 $$ 123
process.Signal on pid 1 returned: operation not permitted
process.Signal on pid 12606 returned: <nil>
process.Signal on pid 123 returned: no such process
  • Prozess 1: Aktiv, aber nicht im Besitz des aktuellen Benutzers.
  • Prozess 12606: Aktiv und im Besitz des aktuellen Benutzers.
  • Prozess 123: Beendet oder beendet.

Das obige ist der detaillierte Inhalt vonGibt es eine zuverlässige Möglichkeit, die Prozessexistenz in Go zu bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn