theGrimReaper
Messages postés25Date d'inscriptiondimanche 31 octobre 2010StatutMembreDernière intervention18 janvier 2014
-
10 janv. 2014 à 16:28
theGrimReaper
Messages postés25Date d'inscriptiondimanche 31 octobre 2010StatutMembreDernière intervention18 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.]
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.