Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tuer tous les fils d'un processus !

    27 octobre 2014 à 12:21:40

    Bonjour :),

    J'ai réalisé un petit programme en C qui créer des fils et les mutes via excevp(...) en des commandes passées en paramètre.

    J'aimerais pouvoir tuer tous les fils du programme principale, donc pour ce faire j'ai utilisé kill(0, SIGTERM), mais lorsque j’exécute le programme dans un makefile (pour le tester, bon ce n'est pas très propre mais sa marche, enfin...) une fois arrivé à la commande kill, sa tu le teste avec!

    J'ai vu que la façon dont j'utilise kill tue tout les processus appartenant au même groupe, bon je ne sais pas trop à quoi correspond un groupe.

    J'aimerais savoir si il existe un moyen simple de ne tuer que les fils du programme principale, sans devoir récupérer le PID de tous les fils et faire une boucle de kill ?

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2014 à 22:13:56

      Je pense que ce sujet aurait du être placé dans la catégorie Programmation C, mais je ne vois pas comment le déplacer
      • Partager sur Facebook
      • Partager sur Twitter
        28 octobre 2014 à 11:51:24

        Pour répondre à ta question, le plus simple serait que tu stockes les pids de tes processus fils et que tu fasses une boucle dessus pour les supprimer. kill(0, SIGTERM) va envoyer le signal SIGTERM à ton processus courant, pas tip top donc. Par-contre je ne savais pas que tuer un processus père tuait aussi les processus fils. T'es sûr de toi quand tu dis ça ?
        • Partager sur Facebook
        • Partager sur Twitter
        Pour ceux qui souhaiteraient apprendre à développer en Rust, un tuto en français est dispo ici. Pour voir mes projets : github.
          29 octobre 2014 à 13:09:09

          Non je me suis mal exprimé, si on tue un processus père avant le fin d'exécution des fils, les fils ne seront pas tué mais récupérés par "init" qui lui attend le signal de terminaison des fils.

          Enfait ce qui tue apparemment tout les processus d'un même groupe c'est le fait de mettre "0" en paramètre PID de la fonction kill, dans le man j'ai sa :

            int kill(pid_t pid, int sig);

          - If pid equals 0, then sig is sent to every process in the process group of the calling process.

          Finalement j'ai bien opté pour un tableau de PID que je kill avec une boucle.

          Merci.

          -
          Edité par R!D3R::. 29 octobre 2014 à 13:17:16

          • Partager sur Facebook
          • Partager sur Twitter
            29 octobre 2014 à 13:35:41

            Tu aurais aussi pu lancer un signal SIGUSR1 qui par défaut termine le processus et ne l’intercepter que dans le père.

            • Partager sur Facebook
            • Partager sur Twitter
            per aspera ad astra – comp.lang.c FAQexplication pointeur

            Tuer tous les fils d'un processus !

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown