Thread & Fork

Résolu
theGrimReaper Messages postés 25 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 18 janvier 2014 - 10 janv. 2014 à 16:28
theGrimReaper Messages postés 25 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 18 janvier 2014 - 10 janv. 2014 à 17:34
Bonjour,

Une autre question de compréhension :
Est-ce que si le processus parent d'un (ou pluseurs threads) ce termine, il tue les fils automatiquement ?

Parce que je sais que pour les forks cela ne marche pas comme ça, vu que les fils sont créés dans un processus différent du père et donc s'il ce termine, les fils se termine pas forcément.
Mais pour le thread c'est un et un seul même processus, d'où ma question...

Je préfère savoir pour éviter les fuites mémoires.
[Question de propreté de codage.]

Merci d'avance.

2 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 124
Modifié par cptpingu le 10/01/2014 à 18:13
Bonjour.

Je vais parler des type Unix que je maîtrise.
Sous Unix, tuer un processus, tue aussi ses threads, mais pas les sous processus (fork).

Mini hors-sujet:

Tu peux le vérifier aisément en utilisant "htop". C'est utilitaire du terminal qui te permet de graphiquement voir tes programmes, voir les sous processus (touche "t"), tuer des processus ("k" puis "9" puis "entrée"), voir les threads d'un processus ("maj" "H"). Filtre par ton nom d'utilisateur pour mieux voir ("u" puis tu sélectionnes ton nom).

Pour gérer le kill des sous process, il faut que le binaire "papa" le gère lui même. Par exemple en shell on utilise généralement:
#!/bin/bash

# Créer 5 sous processus infini. Le "Ctrl + C" est "attrapé"
# et tue les fils (via kill 0 qui veut dire "tuer les fils").

finish()
{
    echo "Sigterm detected, cleaning process..."
    kill 0
}

trap finish SIGINT

for i in 1 2 3 4 5; do
   yes &
done
wait


En C++, on utiliserait soit "waitpid" et "kill" pour faire la même chose, soit boost::asio ou boost::interprocess.

Si tu as besoin de lancer des processus, tu peux regarder ma classe de gestion de processus qui t'épargnes les prises de têtes avec les forks, dup et pipe: http://codes-sources.commentcamarche.net/source/54458-classe-de-gestion-de-processus

__________________________________________________________________________________________________
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
theGrimReaper Messages postés 25 Date d'inscription dimanche 31 octobre 2010 Statut Membre Dernière intervention 18 janvier 2014
10 janv. 2014 à 17:34
Parfait cptpingu.
Très complet et tu as répondu au doute que j'avais.
Merci bien.
0