Fork() et Signaux

Voir le sujet précédent Voir le sujet suivant Aller en bas

Fork() et Signaux

Message  michaelvd le Lun 16 Avr 2012, 17:08

Bonjour!

Petite question:

j'ai un main() où je fais un fork() un certain nombre de fois comme ceci:

Code:

if(fork()==0){
for(;;);
}

Je peux terminer le programme dans le main() en tappant 'q', ceci fait un exit(0), le père est terminé mais les fils (dans le fork()) sont 'orphelins'.

Maintenant si je fais CTRL+C au niveau du père, le père est 'tué' et tout les fils avec.
Etant donné que les fils n'héritent pas des signaux, pourquoi ce phénomène s'est-il produit?

Salutation,
Michael VD

michaelvd

Nombre de messages : 117
Age : 28
Prénom : Michaël
Statut : 2ième Réseaux/Télécom
Localisation : Bruxelles
Date d'inscription : 16/09/2009

http://www.binturong.be

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  galaeron le Lun 16 Avr 2012, 18:36

Salut Michael, tu testes ça sur quoi? Tu as testez d'autre signaux ?
Après test chez moi ça fonctionne comme prévu, attention que ce n'est pas parce que le process fils ne bloque pas le terminal qu'il ne tourne plus ...
Exemple :
Code:

#include <stdio.h>
#include <stdlib.h>
int main(){
int i=0;
if ((i=fork())==0)for(;;);
printf("%d\n",i);
}
ps aux | grep "LenomduprocessOUleIquiaétéaffiché"

galaeron

Nombre de messages : 113
Age : 28
Prénom : Arthur
Statut : 3IR12
Date d'inscription : 29/06/2011

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  michaelvd le Lun 16 Avr 2012, 18:47

Quand je quitte le père, via la fonctionne exit(0), les orphelins restent, il n'y a pas de nettoyage. Un ctrl+c consiste à faire un 'killall -2 "nomProgramme" '. Quand il est envoyé au niveau du père (via CTRL+C) ca tue tout le monde!!! Alors qu'il n'y a pas d'héritage des signaux.

michaelvd

Nombre de messages : 117
Age : 28
Prénom : Michaël
Statut : 2ième Réseaux/Télécom
Localisation : Bruxelles
Date d'inscription : 16/09/2009

http://www.binturong.be

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  galaeron le Lun 16 Avr 2012, 18:57

Je t'invite à faire dans ton prompt
"kill -l 2"
Normalement tu verras "INT" apparaitre qui confirmera bien que ctrl+c est le signal numéro 2 sur ta machine.
Ensuite alors que le père et le fils tourne, dans un autre prompt fais un
kill -2 pIDpère
Le fils existera toujours.


EDIT : Voici une explication !
http://www.vidarholen.net/contents/blog/?p=34

galaeron

Nombre de messages : 113
Age : 28
Prénom : Arthur
Statut : 3IR12
Date d'inscription : 29/06/2011

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  mba le Lun 16 Avr 2012, 23:11

michaelvd a écrit:Maintenant si je fais CTRL+C au niveau du père, le père est 'tué' et tout les fils avec.
Etant donné que les fils n'héritent pas des signaux, pourquoi ce phénomène s'est-il produit?

Je n'ai pas vérifié, je le ferai sans doutes, en tout cas ne prend pas ça pour la vérité absolue ...
de mémoire c'est une des particularités du traitement par défaut du signal CTRL-C : tuer le process et ses fils...

à vérifier ...

Semble confirmé dans le lien ci dessus. Et sont concernés les processus attachés au terminal

mba

Nombre de messages : 1493
Statut : prof
Localisation : Lessines
Date d'inscription : 07/10/2006

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  galaeron le Lun 16 Avr 2012, 23:23

mba a écrit:
de mémoire c'est une des particularités du traitement par défaut du signal CTRL-C : tuer le process et ses fils...
Un "kill -2" a un comportement normal ... donc selon moi et en accord avec l'article cité, cela viendrait plutot du terminal ...

galaeron

Nombre de messages : 113
Age : 28
Prénom : Arthur
Statut : 3IR12
Date d'inscription : 29/06/2011

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  mba le Mar 17 Avr 2012, 10:11

oui,
je me souviens de cette différence.

A creuser ... ;-)

mba

Nombre de messages : 1493
Statut : prof
Localisation : Lessines
Date d'inscription : 07/10/2006

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  michaelvd le Mar 17 Avr 2012, 10:39

On est daccord sur le fait qu'un CTRL+C est exactement la même chose qu'un kill -2

PS: Merci Galaeron et Mba pour vos réponses Smile.
PSPS: On va en parler Galaeron Smile.


michaelvd

Nombre de messages : 117
Age : 28
Prénom : Michaël
Statut : 2ième Réseaux/Télécom
Localisation : Bruxelles
Date d'inscription : 16/09/2009

http://www.binturong.be

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  mba le Mar 17 Avr 2012, 12:45

michaelvd a écrit:On est daccord sur le fait qu'un CTRL+C est exactement la même chose qu'un kill -2
en effet non, CTRL-C serait plus meurtrier, mais il envoie bien le signal n° 2

mba

Nombre de messages : 1493
Statut : prof
Localisation : Lessines
Date d'inscription : 07/10/2006

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  michaelvd le Mar 17 Avr 2012, 14:30

mba a écrit:
michaelvd a écrit:On est daccord sur le fait qu'un CTRL+C est exactement la même chose qu'un kill -2
en effet non, CTRL-C serait plus meurtrier, mais il envoie bien le signal n° 2

Donc le mieux maintenant, c'est d'attrapper le signal 2, et là le CTRL+C aura la même attitude qu'un kill -2?

michaelvd

Nombre de messages : 117
Age : 28
Prénom : Michaël
Statut : 2ième Réseaux/Télécom
Localisation : Bruxelles
Date d'inscription : 16/09/2009

http://www.binturong.be

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  galaeron le Mar 17 Avr 2012, 15:26

michaelvd a écrit:Donc le mieux maintenant, c'est d'attrapper le signal 2, et là le CTRL+C aura la même attitude qu'un kill -2?

Si tu veux tué uniquement le père ou le fils tu trappes le signal 2 tu t'arranges pour tuer le père ou le fils en fonction de tes besoins.

galaeron

Nombre de messages : 113
Age : 28
Prénom : Arthur
Statut : 3IR12
Date d'inscription : 29/06/2011

Revenir en haut Aller en bas

Re: Fork() et Signaux

Message  Contenu sponsorisé Aujourd'hui à 20:40


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum