Maison > développement back-end > Golang > 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
Libérer: 2024-11-06 22:34:02
original
1132 Les gens l'ont consulté

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)
        }
    }
}
Copier après la connexion

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
Copier après la connexion
  • 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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal