Mettre fin à un processus de l'arbre (C pour Windows)
Cela a été demandé avant, mais je ne peux pas trouver une réponse définitive, dans le code.
J'ai ouvert un processus, ProcessA (avec le PID 1234). Ce processus ouvre un processus enfant, ProcessAB PID (5678).
Après je suis fait, je résilier ProcessA mais j'ai encore de la persistance de ProcessAB.
Comment puis-je mettre fin à tout le processus de l'arbre? Ce que je veux dire, comment puis-je m'assurer que si je résilier le processus, je l'ai ouvert, je suis également à la résiliation de tous les processus associés?
Grâce
Code est apprécié.
OriginalL'auteur wonderer | 2009-07-23
Vous devez vous connecter pour publier un commentaire.
Vérifier ce fil pour le groupement des processus au sein d'un "job".
Si cela ne fonctionne pas pour vous, une maison grandi approche pourrait aller comme suit:
Exemple de code:
Je n'arrive pas à obtenir ce droit. Avez-vous un exemple extrait? merci
Désolé, j'avais écrit qu'à partir de la mémoire. Le premier devrait être CreateToolhelp32Snapshot, pas EnumProcesses. L'échantillon ci-dessus.
vous avez besoin pour obtenir de débogage de privilèges pour ouvrir le processus, mais il semble être au travail autre que cela. merci
Merci pour cette. À noter que pour les homebrew cas, il vous manque un de la récursivité. J'ai répondu ci-dessous.
OriginalL'auteur Mike Marshall
Utilisation Objets.
C'est la chose la plus proche à unix 'processus de groupe" que windows a à offrir.
Objets vous permettent d'indiquer un processus enfant (et de tous ses enfants) peuvent être gérés ensemble, esp. pour être tué. Contrairement à unix, de cette écriture 'objets' ne peut pas être imbriquées à l'. Ce qui signifie que si un parent crée un objet de travail pour un enfant, tout ce que l'enfant les enfants ne peuvent pas eux-mêmes le Travail d'utilisation des Objets (qui est un /grave/limitation à mon humble avis, comme un fichier système qui ne permet qu'à un seul niveau de sous-répertoires).
OriginalL'auteur seriss
De tuer un arbre entier avec TOUT!!! childs:
OriginalL'auteur Michael
Il y a Comment Tuer un Processus d'Arbre, mais c'est en C#. Je ne pense pas que c'est trop dur de port à C.
Voir NtQueryInformationProcess Fonction et Fonction TerminateProcess.
OriginalL'auteur Eugene Yokota
@mjmarsh réponses besoins de la récursivité pour le homebrew cas, sinon c'est celui de droite. La création d'emplois objets est meilleur que le bas quand vous le pouvez.
OriginalL'auteur user2346536
Ce qui suit est pour Linux, mais j'espère que cela aide pour Windows avec certaines adaptations.
Lorsque vous fork(), enregistrer la valeur de retour, qui est le pid du processus fils, puis, quand la mère est sur le point de quitter, kill() le pid.
Si vous avez plusieurs enfants de processus, vous pouvez envoyer le tuer pour le groupe de processus. Par défaut, le processus enfants ont les mêmes pgid en tant que parent.
OriginalL'auteur Mike Mu