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
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!