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

Threads & Processus C++ Discussion :

Processus en pause


Sujet :

Threads & Processus C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Par défaut Processus en pause
    Bonjour,

    Je suis un peu debutant dans la programmation multiprecessus et aussi nouveau sur le forum.
    Je cherche a mettre en pause un processus.
    Mon but est de lister tout les processus tournant sur une machine et de mettre quelques un en pause mais pas de les tuers afin de les remettres en marche a la fin de mon processus.
    Merci de votre aide

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    il faut regarder du coté de signal/sigaction/kill et choisir le signal approprié a envoyer a ton application.

    http://pwet.fr/man/linux/appels_systemes/kill

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <sys/types.h>
     
     
    #include <signal.h>
     
    int kill(pid_t pid, int sig);
    Voici la liste des signaux que tu peux envoyer a un processus.
    Code : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
           SIGHUP       1    hangup
           SIGINT       2    interrupt
           SIGQUIT      3    quit
           SIGILL       4    illegal instruction (not reset when caught)
           SIGTRAP      5    trace trap (not reset when caught)
           SIGABRT      6    used by abort
           SIGEMT       7    EMT instruction
           SIGFPE       8    floating point exception
           SIGKILL      9    kill (cannot be caught or ignored)
           SIGBUS      10    bus error
           SIGSEGV     11    segmentation violation
           SIGSYS      12    bad argument to system call
           SIGPIPE     13    write on a pipe with no one to read it
           SIGALRM     14    alarm clock
           SIGTERM     15    software termination signal from kill
           SIGURG      16    urgent condition on IO channel
           SIGSTOP     17    sendable stop signal not from tty
           SIGTSTP     18    stop signal from tty
           SIGCONT     19    continue a stopped process
           SIGCHLD     20    to parent on child stop or exit
           SIGTTIN     21    to readers pgrp upon background tty read
           SIGTTOU     22    like TTIN for output if (tp->t_local&LTOSTOP)
           SIGPOLL     23    System V name for SIGIO
           SIGXCPU     24    exceeded CPU time limit
           SIGXFSZ     25    exceeded file size limit
           SIGVTALRM   26    virtual time alarm
           SIGPROF     27    profiling time alarm
           SIGWINCH    28    window changed
           SIGLOST     29    resource lost (eg, record-lock lost)
           SIGUSR1     30    user defined signal 1
           SIGUSR2     31    user defined signal 2
    a priori tu devrais jouer avec SIGSTOP/SIGSTP pour stopper ton processus et SIGCONT pour le faire repartir.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Par défaut
    Merci jabbounet,

    Par contre le fait de mettre le processus en SIGSTOP et de le relancer ensuite ne poseras pas de probleme pour ce processus ?
    comment puis je appliquer cette methode ? je develope sur Windows et ton liens est pour linux.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Par défaut
    Apres quelque recherche sur killsignal, j'ai pu remarquer que c'etait pour Linux.
    hors je developpe sur Windows.
    Quelqu'un pourrait m'aider au sujet de mettre des processus en suspend et les relancer par la suite ?
    Merci d'avance.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 058
    Billets dans le blog
    142
    Par défaut
    Il va donc falloir cherche dans la msdn.

    Ceci peut être interessant à lire, pour une première investigation: http://www.codeproject.com/KB/threads/pausep.aspx

    ( Pardon pour le fait que cela soit en anglais )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Par défaut
    Merci pour ce petit doc, je suis deja tombé dessus et analysé sa solution.
    elle consiste a ennumerer tout les threads d'un processus et de les mettre en pause, mais j'ai cru comprendre que cette solution n'etait pas trop conseillé dans le sens ou la reprise des threads n'etaient pas assurés. c'est a dire que la reprise des threads ne se faisant pas dans le bon ordre pouvait poser un souci.
    c'est pour ca que je cherche eventuellement une solution de mettre directement le processus en pause qui je pense gereras l'ordre de reprise des threads qui lui sont associés. (etant debutant, je supose peut etre des choses qui ne sont pas verifié)
    Avec des quelques recherches, j'ai trouvé une dll qui ferais ca, mais je n'arraive pas trouver comment m'en servir.
    cette dll se trouve a parament dans system32 et se nomme ntdll.
    elle aurait une methode NtSuspendProcess(hprocess) et une NtResumeProcess(hProcess).
    mais je ne sais pas comment les appliqués.
    Merci de votre aide.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Par défaut
    Un nouveau probleme se pose a moi.
    Si je suspend un processus, voir la liste de threads qui lui est associé, je ne sais pas si la ressource qu'il utilise est liberé.
    En fait mon but est de recuperer un maximum de ressource pour faire tourner mon appli avec toutes les ressources possible.
    je sais qu'il ne faut pas suspendre tout les processus (ne pas suspendre le processus de l'ordonnaceur), mais je veut suspendre ceux des autres application qui serait suceptible de tourner en meme temps que la mienne.
    HELP !!

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    N'est-il pas possible d'augmenter la priorité de ton processus ? Sa serai plus simple et moins dangereux . (bien que je n'ai pas la moindre idée de comment faire)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Par défaut
    oui, en effet ce fut une de mes premieres recherches.
    mais ca ne suffit pas.
    l'ordonnaceur continue a donner la mains au autre processus (moins souvant mais encore trop pour moi)
    Il doit bien y avoir un moyen de mettre toutes les autres appli en suspend pour avoir toute les ressources.
    (je m'acharne mais j'aime bien trouver la solution)

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Par défaut
    bonjour a tous,

    Je n'ai toujours pas de solution pour mon probleme de processus.
    Je rappel un peu le sujet:
    Je cherche a mettre en suspend les processus d'une machine et de faire tourner une application avec toute la ressource processeur et memoire possible.
    dans le but de faire des calculs le plus vite possible et avec la meilleur precision.

    Merci de votre aide.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Ça semble être une chose particulièrement stupide à faire.
    À moins que tu sois sûr qu'il y ait des processus inutiles et gourmands qui tournent sur la machine en permanence, la plupart des processus qui tournent sous Windows sont utiles ; s'ils ne le sont pas ils sont sans doute déjà en sommeil...
    En gros t'essaies de te substituer au système d'exploitation et - à moins que tu sois parfaitement sûr de toi - c'est probablement une bêtise.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Par défaut
    Je ne doute pas que vu comme ca ce soit une idée tres stupide.
    c'est sure que si je suspend tout les processus, ca risque d'etre dangereux aussi.
    mon reel but est surtout de suspendre les processus des application deja lancer par l'utilisateur.
    Donc dans un premier temps, je cherche a suspendre un processus en general, ensuite, il me faudras faire une recherche des processus d'application lancer.
    je pense que dans la liste des processus lancer il ne faudras surment pas suspendre les processus important du system.
    aussi, je ne veut pas les tuer (kill); mais bien les suspendre pour leur redonner la main a la fin de mon appli.
    Merci pour ta reponse.
    Meme si je ne sais toujours pas comment faire.

  13. #13
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Matt_NewDev Voir le message
    Si je suspend un processus, voir la liste de threads qui lui est associé, je ne sais pas si la ressource qu'il utilise est liberé.
    NON. Il n'y a aucune raison que le noyau libère les ressources sinon, le reprise du processus/thread ne fonctionnerait pas.

    Autre chose, quand on commence à jouer avec les priorités et les arrêts / suspension de thread et de process, on cours au devant des ennuis.

    Il y a probablement un problème ailleurs dans ton code ou programme et la solution que tu voies de stopper les autres pour récupérer de la puissance CPU ou des ressources n'est pas la bonne.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    Citation Envoyé par ElGat0 Voir le message
    Ça semble être une chose particulièrement stupide à faire.
    À moins que tu sois sûr qu'il y ait des processus inutiles et gourmands qui tournent sur la machine en permanence, la plupart des processus qui tournent sous Windows sont utiles ; s'ils ne le sont pas ils sont sans doute déjà en sommeil...
    En gros t'essaies de te substituer au système d'exploitation et - à moins que tu sois parfaitement sûr de toi - c'est probablement une bêtise.
    +1

    De toute manière le gain que tu obtiendras en gelant des processus sera minime sauf si une appli gourmande est aussi en cour mais bon c'est a l'utilisateur de gérer ça pas vraiment a toi .
    les processus ne sont pas fait pour être mis en pause sans leur demander leur avis et risquent de ne pas apprécier, si ils sont en train d'accéder à une ressource, à un flux de données, ect...

Discussions similaires

  1. Solution pour mettre en pause et relancer processus par nom
    Par beginner936 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 24/07/2014, 13h54
  2. Réponses: 3
    Dernier message: 25/05/2012, 18h24
  3. Communication inter-processus et pause()
    Par jsebfranck dans le forum POSIX
    Réponses: 10
    Dernier message: 14/02/2008, 14h52
  4. [Processus][pause] attendre la fin ?
    Par MrDuChnok dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 19/07/2004, 13h51
  5. Réponses: 2
    Dernier message: 04/10/2002, 09h13

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