IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

Un processus endormi répond étrangement "Responding"


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 55
    Par défaut Un processus endormi répond étrangement "Responding"
    Bonjour,

    Je voudrais réaliser un petit programme qui teste si un autre programme est en cours de fonctionnement, ou a planté, pour le relancer si besoin est.
    Avec les classes System.Diagnostics.Process, il est facile d'interroger la valeur HasExited ou Responding d'un process.
    Mon problème est le suivant : si mon process ciblé est en train de dormir pour un temps infini ou très long, ou est interblocké par des sémaphores mal faits (il est donc devenu inutilisable, autrement dit planté, d'après moi), et bien "Responding" répond toujours <true>. Ce n'est donc pas un test fiable dans ce cas !
    Comment détecter (à part à la main, en écrivant régulièrement dans un log par exemple), qu'un process est endormi ou bloqué ?

    Autre possibilité : tester le WaitState de la collection des ProcessThreads du processus ciblé. Malheureusement, un process non bloqué, mais qui ne fait rien (l'interface graphique attend un événement) répond Wait... donc n'est pas différenciable d'un sleep erroné.

    Une idée ? Merci !

    +
    Chacha

    Précision : c'est le mainthread de mon processus qui est endormi/bloqué. Il peut y avoir des threads en tâche de fond, qui, eux, ne sont pas bloqués (mais n'ont pas d'intérêt si l'interface ne répond plus)

    Précision : en fait si mon thread est bloqué à cause d'un System::Threading::Thread::Sleep(longtemps), là ça marche. En revanche, s'il est bloqué par un System::Threading::Monitor::Wait(this); là c'est pas bon : il est toujours marqué comme "Responding". J'ai essayé d'autres techniques de test, comme SendMessageTimeout, mais le comportement est le même.

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Dans un cas comme celui-ci, j'utiliserai les messages Windows interprocess ou pourquoi pas une communication réseau (127.0.0.1).

    Un type de message par thread par exemple. Si le thread réponds dans un temps raisonnable c'est bon, sinon il est bloqué.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo