Détermination de l'existence d'un processus dans Go à l'aide de os.FindProcess
Bien que l'utilisation de os.FindProcess puisse fournir des informations sur l'existence d'un processus, elle n'est pas entièrement fiable pour déterminer si un processus a été terminé ou tué.
Tirer parti de l'approche Unix
Traditionnellement, la commande Unix kill -s 0 [PID] est utilisée pour vérifier si un processus est toujours en cours. Cette approche envoie un signal de 0 au processus, sans qu'aucun signal réel ne soit envoyé. Au lieu de cela, il sert à vérifier l'existence du processus.
Implémentation dans Go
En traduisant cette méthode en Go, le code suivant montre comment déterminer si un processus est toujours actif :
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) } } }
Exemple de sortie
L'exécution de ce code fournit la sortie suivante, indiquant l'état des processus avec différents ID :
$ ./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
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!