2010-05-25 2 views
1

Est-il réel que la fonction TerminateProcess dans Windows puisse se bloquer car les threads à l'intérieur du processus étaient bloqués dans un interblocage? Exemple: Le processus A s'exécute sous le contrôle du processus B, le processus A entre dans un interblocage et le processus B le détecte et décide de «tuer» le processus A en utilisant TerminateProcess.TerminateProcess et deadlocks

Aurait-il réussi à tuer le processus A bloqué?

Répondre

3

Oui, tous les objets noyau détenus par le processus seront libérés, y compris les verrous. Le principal problème avec TerminateProcess est que le processus n'a pas son mot à dire: s'il maintient un état global (fichiers, mémoire partagée, etc.), alors vous n'avez aucune garantie que ces choses sont dans un état cohérent après le le processus est terminé.

+0

Alors qu'est-ce qui pourrait l'amener à se bloquer au moment du Tuer et c'est aussi le processus mère? –

+0

S'il a des E/S en attente, le noyau attend la fin des E/S en attente avant de terminer le processus. Si le processus est en mode kernel, il attendra également que le processus soit terminé (les deux sont assez rares et indiquent généralement un mauvais pilote ou un mauvais matériel) –

0

Oui. Tant que vous avez les bonnes permissions, TerminateProcess va tuer les autres processus morts, quel que soit le niveau de blocage.

0

TerminateProcess va tuer chaque thread (comme si TerminateThread avait été utilisé sur chaque thread dans le processus). Mais il ne va pas tuer les threads qui sont bloqués dans le noyau (par exemple en raison d'un bug de pilote de périphérique).

Questions connexes