Maison  >  Article  >  développement back-end  >  Un échec d’appel os.FindProcess dans Go signifie-t-il nécessairement qu’un processus est terminé ?

Un échec d’appel os.FindProcess dans Go signifie-t-il nécessairement qu’un processus est terminé ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 07:25:02267parcourir

Does a Failed os.FindProcess Call in Go Necessarily Mean a Process Has Terminated?

Détermination de l'existence d'un processus dans Go

Dans Go, la fonction os.FindProcess peut être utilisée pour récupérer un processus par son PID. Cependant, si cette fonction renvoie une erreur, cela indique-t-il nécessairement que le processus est terminé ?

Vérification de l'existence du processus

Selon la page de manuel de kill(2 ) sous Unix, envoyer un signal de 0 à un processus n'envoie pas réellement de signal mais vérifie si le processus est vivant. Cette approche peut être adaptée dans Go pour déterminer l'existence d'un processus.

Implémentation de Go

Le code Go suivant illustre cette technique :

package main

import (
    "fmt"
    "log"
    "os"
    "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

Lors de son exécution, ce code affichera l'état de plusieurs processus :

$ ./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

Dans cet exemple, le processus 1 renvoie une erreur car il est n'appartient pas à l'utilisateur actuel. Le processus 12606 renvoie zéro car il est actif et appartient à l'utilisateur. Le processus 123 renvoie une erreur car il n'existe plus.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn