Maison >développement back-end >Golang >Comment vérifier de manière fiable l'existence d'un processus dans Go Beyond os.FindProcess ?
Comment vérifier l'existence d'un processus dans Go sans s'appuyer uniquement sur os.FindProcess
Lorsqu'il s'agit de processus dans Go, le naturel L’inclination est d’utiliser os.FindProcess pour déterminer si un processus avec un PID spécifié existe. Cependant, se fier uniquement à cette méthode peut conduire à des conclusions inexactes.
Les limites de os.FindProcess
os.FindProcess interroge efficacement le système d'exploitation pour obtenir des informations sur un processus. . Si le processus avec le PID spécifié existe, il renvoie un résultat sans erreur. Cependant, si le processus est déjà terminé, os.FindProcess peut toujours signaler un succès si le système d'exploitation n'a pas encore récupéré le processus (c'est-à-dire, supprimé son entrée de la table des processus du système). Cela peut conduire à des faux positifs, suggérant qu'un processus est toujours en cours alors qu'il est effectivement terminé.
Explorer une solution alternative : envoyer un signal
Pour vérifier de manière fiable l'existence d'un processus, nous pouvons utiliser l'approche Unix traditionnelle consistant à envoyer un signal de 0 (zéro) au processus cible. Cette technique fonctionne parce que :
Implémentation de la solution basée sur le signal dans Go
Voici un exemple de fonction Go qui utilise ceci approche :
package main import ( "fmt" "log" "os" "os/signal" "strconv" ) // checkProcessExistence sends a signal of 0 to a process to determine its existence. func checkProcessExistence(pid int) bool { process, err := os.FindProcess(pid) if err != nil { log.Fatal(err) } err = process.Signal(signal.Signal(0)) if err != nil { return false } return true } func main() { for _, p := range os.Args[1:] { pid, err := strconv.ParseInt(p, 10, 64) if err != nil { log.Fatal(err) } if checkProcessExistence(int(pid)) { fmt.Printf("Process with PID %d is running\n", pid) } else { fmt.Printf("Process with PID %d is not running\n", pid) } } }
Exemple d'utilisation
Supposons que vous ayez le PID du processus A et que vous souhaitiez vérifier s'il est toujours en cours d'exécution :
$ go run main.go 12345 Process with PID 12345 is running
Cette sortie confirme que le processus 12345 est bien vivant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!