Maison  >  Article  >  développement back-end  >  Existe-t-il un moyen fiable de déterminer l’existence d’un processus dans Go ?

Existe-t-il un moyen fiable de déterminer l’existence d’un processus dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 22:34:02976parcourir

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

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
  • Processus 1 : vivant mais n'appartenant pas à l'utilisateur actuel.
  • Processus 12606 : vivant et appartenant à l'utilisateur actuel.
  • Processus 123 : terminé ou tué.

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