Comment vérifier si le processus n'est pas de répondre?
Est-il possible de vérifier à partir de code si un autre processus est de ne pas répondre?
Le problème est que même si l'application est en panne et sur le Gestionnaire de la liste est marqué comme "ne Répond Pas", le Processus.Répondre propriété est encore de retour "vrai".
La " Sorti de l'événement et de la fonction 'WaitForExit" sont de faire aucune action si le processus est - ce qui est clair - il est sorti. Il n'est donc pas le point.
Problème en deux mots, j'ai besoin de savoir que l'application est écrasé. Comment le contrôler à partir du code?
Je vous remercie pour votre temps.
L'autre processus (visible) de la fenêtre principale? Cela est requis par la
mon application doit vérifier les autres processus, défini par l'utilisateur lors de l'exécution. donc je ne sais pas si c'est par exemple une application de console.
Autres que les Gestionnaires de Tâches heuristique pour les applications à interface graphique (IIRC: faut-il traiter un WN_NULL message en temps opportun) il n'existe pas de moyen de déterminer "hung" (par exemple il pourrait être en attente de quelque chose ou occupé à faire le travail).
Process.Responding
, voir msdn.microsoft.com/en-us/library/...mon application doit vérifier les autres processus, défini par l'utilisateur lors de l'exécution. donc je ne sais pas si c'est par exemple une application de console.
Autres que les Gestionnaires de Tâches heuristique pour les applications à interface graphique (IIRC: faut-il traiter un WN_NULL message en temps opportun) il n'existe pas de moyen de déterminer "hung" (par exemple il pourrait être en attente de quelque chose ou occupé à faire le travail).
OriginalL'auteur futurlo | 2010-08-17
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de solution générale à ce problème.
Il est impossible de dire si un processus est suspendu ou pas, parce que le terme "suspendu" est entièrement dépendant de la le contexte du processus qui est en cours d'exécution.
La pendaison processus de toujours faire ce qu'il a été codé à faire. Le développeur peut avoir codé mal, mais Windows ne peut pas faire des hypothèses sur ce qui est bon/mauvais.
Possible idées à essayer peut-être:
La Processus.Répondre appel d'indiquer si oui ou non un processus de l'exécution d'un message de windows boucle est de répondre.
Une solution possible pour le cas plus général pourrait être de sondage de l'utilisation de la mémoire pour le processus à intervalles et si elle ne change pas après le temps, supposer qu'il est accroché. Vous pouvez le faire avec
Process.WorkingSet64
. Cependant, je pense que ce serait la cause d'un nombre de faux positifs - la stabilité des processus qui ne sont pas le traitement de ce qui peut sembler être suspendus. Il serait également entraîner des faux négatifs où un accrochage processus qui avait une fuite de mémoire semble être en train de faire quelque chose d'utile, alors qu'en fait, il a été coincé dans une boucle.Si le processus écrit à la StandardError/StandardOutput flux (comme de nombreuses applications de console), vous pouvez essayer à l'écoute de sortie:
Process.BeginOutputReadLine
etProcess.BeginErrorReadLine
. Si il n'y a pas de sortie à l'intérieur d'une période donnée, vous pouvez en déduire qu'elle a raccroché.Mais vous n'allez pas à trouver quelque chose qui fonctionne dans le cas général.
OriginalL'auteur sheikhjabootie