Vérifiez si un processus existe dans go way
Si j'ai le PID d'un processus, est os.FindProcess assez pour tester l'existence des processus? Je veux dire, si elle renvoie err
puis-je suppose que c'est terminé (ou tué)?
Edit:
J'ai juste écrit une fonction wrapper autour de kill -s 0
(vieux style bash processus de test). Cela fonctionne sans aucun problème, mais je suis quand même content si il y a d'autres solutions (fait avec go bibliothèques) pour ce problème.:
func checkPid(pid int) bool {
out, err := exec.Command("kill", "-s", "0", strconv.Itoa(pid)).CombinedOutput()
if err != nil {
log.Println(err)
}
if string(out) == "" {
return true //pid exist
}
return false
}
source d'informationauteur Fatih Arslan
Vous devez vous connecter pour publier un commentaire.
Voici la traditionnelle unix moyen de voir si un processus est vivant - envoyer un signal de 0 (comme vous l'avez fait avec votre bash exemple).
De
kill(2)
:Et traduit en Aller
Lorsque vous l'exécutez, vous obtenez ceci, montrant que le processus de 123 est mort, le processus 1 est vivant, mais qui ne vous appartient pas et processus 12606 est vivant et détenu par vous.
Sur les systèmes unix (linux, freebsd, etc) os.FindProcess ne sera jamais une erreur. Je ne sais pas ce qui se passe sur Windows. Cela signifie que vous ne saurez pas si le PID est correct jusqu'à ce que vous essayez d'utiliser l' *système d'exploitation.Processus pour quelque chose.
Vous pouvez regarder le code ici.
Vous pouvez aussi simplement utiliser
syscall.Kill
. Il s'élève à moins de code.Si un déjà connu pid n'est pas trouvé dans le système (pas sûr de passer des fonctions), cela signifie que le processus a définitivement mis fin a été rejoint (sur Unix, avec attendre d'appel).
Mais l'inverse n'est pas nécessairement vrai. Juste parce qu'un pid existe, il n'est pas quarantee c'est le même processus que précédemment. Il y a seulement 65535 valide pids en standard de Linux par exemple, et ils peuvent être ré-utilisé lorsqu'il y a un wrap-around. Cependant, si vous regardez assez souvent, pour des raisons pratiques, vous n'avez pas besoin de faire attention à ce (tant que le pid de mal de nouveaux processus d'être trouvé n'est pas une faille de sécurité ou quelque chose d'autre critique, quelqu'un pourrait essayer de déclencher intentionnellement à des fins malveillantes).
Liens connexes (et des questions Connexes sur leur colonne de droite):
Sur Windows en vérifiant le résultat de
os.FindProcess()
semble être suffisant pour vérifier si le processus est en cours d'exécution.