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

POSIX C Discussion :

Tuer un processus après un certain temps


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    elm
    elm est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Par défaut Tuer un processus après un certain temps
    Bonjour,
    Je cherche un moyen d'arrêter un processus après un certain temps (60 secondes temps réel).

    Je ne vois pas comment créer un timer qui arrête le processus après un temps déterminé. Je suppose qu'il existe aussi une fonction pour ça mais je n'ai pas trouvé... Créer un processus qui dort pendant 60 secondes puis tue mon premier processus n'a pas l'air particulièrement efficace, je me trompe?

    Merci d'avance!

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tu veux qu'il se "suicide" ou qu'il soit tué par quelqu'un d'autre ?

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Si le processus doit se suicider, tu peux utiliser le couple signal/alarm.

    Tu utilises alarm pour forcer l'envoi d'un signal SIGARLM au bout de 60 secondes. Et tu utilises signal pour mettre un handler pour l'intercepter.

    Ou sur notre site :
    http://man.developpez.com/man2/signal.2.php
    http://man.developpez.com/man2/alarm.2.php

    EDIT : Je suis pas certain de la portabilité du programme sous Windows... C'est peut être sigaction au lieu de signal qu'il faut utiliser, mais le serveur sur lequel j'ai mes codes d'exemple est HS.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Windows ne gère pas du tout SIGALRM.
    Voici ce que disent les commentaires de la CRT à ce sujet:
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    The Win32/Dosx32 implementation
    *       supports seven signals, divided up into three general groups
    *
    *       1. Signals corresponding to OS exceptions. These are:
    *                       SIGFPE
    *                       SIGILL
    *                       SIGSEGV
    *          <snip>
    *
    *       2. Signals corresponding to ^C and ^Break. These are:
    *                       SIGINT
    *                       SIGBREAK
    *          <snip>
    *
    *       3. Signals which are implemented only in the runtime. That is, they
    *          occur only as the result of a call to raise().
    *                       SIGABRT
    *                       SIGTERM*/
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    elm
    elm est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Par défaut
    Merci Millie, ceci fonctionne!

    Par contre, même si je ne dois pas porter ce programme sur Windows, il s'agit d'un projet où les assistants sont très critiques au niveau des choix dans l'implémentation (malgré nos connaissances limitées et le peu d'indications de leur part...).

    Il me semble que l'utilisation des signaux peut être désactivée par d'autres programmes, peut-on donc considérer cette solution comme fiable, ou est-il recommandé d'utiliser des méthodes différentes (j'ignore lesquelles) si on veut que le programme respecte les spécifications en toute circonstance?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    eh bien si tu veux tu peux te servir du "clock" temps réel que j'ai mis dans les sources http://c.developpez.com/sources/c/?p...DATE_get_clock

    Il y a l'exemple..

    A ce compte-là tu fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    double t0 ;
     
    t0 = GetClock();
     
    while ( (GetClock() -t0) < 60.0 )
      {
        ..... /* Ton code */
      }

  7. #7
    elm
    elm est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 20
    Par défaut
    Merci, cependant cette solution ne me semble pas adaptée à mon problème (cause de l'attente active et de l'imprécision).

    Je suis confronté à un autre problème, à présent que j'ai compris le fonctionnement des signaux: le handler est une fonction void sans argument. Comment faire maintenant si par exemple lorsqu'en exécutant ctrl-c pendant mon programme (signal SIGINT) je voudrais qu'il affiche un résultat intermédiaire à la sortie standard?

    En gros comment pourrais-je faire pour passer proprement une structure à mon signal handler?

    [Edit: Problème apparemment résolu: il faut utiliser une variable globale vu qu'on se trouve dans une situation particulière lors de ce signal].

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PC qui rame apres un certain temps
    Par sovo dans le forum Ordinateurs
    Réponses: 9
    Dernier message: 26/07/2006, 17h04
  2. Apache devient inacessible après un certains temps ?
    Par Quality_Design dans le forum Apache
    Réponses: 6
    Dernier message: 19/02/2006, 22h09
  3. Ouvrir un popup après un certain temps
    Par Oberown dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/11/2005, 17h06
  4. Comment fermer une popup après un certains temps ?
    Par magic8392 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/10/2005, 12h06
  5. Ouvrir une fenêtre et la fermer après un certain temps
    Par MiJack dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/03/2005, 17h16

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