traitement de SIGCHILD. Beso ins de precision C sous Linux

Le
projlin
Bonjour,

Je traite dans un programme le signal sigchid.
J'ai lu par mal de messages ici sur les newsgroup et sur internet.

Un détail m'échappe et j'ai du mal à comprendre

Dans quasiment toutes les routines en C que l'on trouve sur Internet
ou ici dans le traitement du signal On trouve quasiment toujours un
test du genre--


child_pid = waitpid ((pid_t) -1, &child_status, WNOHANG);

if (child_pid > (pid_t) 0)
{
/* Check if it is our child */
if (child_pid == last_child_pid)


Ma question est POURQUOI??

Pour quoi faire un "test de paternité" sur le signal sigchid ??

Si je reçois un signal sigchild c'est que mon fils est mort non ????

Les processus sous Linux on comme les Star de Cinéma ?
Passé un certain age il leur sort des fils de tous les cotés ?

Il doit y avoir une réponses car ce qui m'inquiette c'est quand je
fait une rechercher sur des source C qui gère le signal SIGCHID, Ils
utilises Wait pidwait ou wait3 ou wait4 pour récupérer le pid du
défunt fils, mais ils testent tous que ce pid soit bien le fils ??

Pourtant mes lecture sur le signal disent que SIGCHILD c'est la mort
de mon fils, et pas d'un cousin ou voisin alors ???

Pourquoi ce test ??

merci

--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilles-Claude Rajaobelina
Le #7143781
wrote:
> Bonjour,
>
> Je traite dans un programme le signal sigchid.[...]
>
> Un détail m'échappe et j'ai du mal à comprendre
>
> Dans quasiment toutes les routines en C [...]
> {
> /* Check if it is our child */
> if (child_pid == last_child_pid)
>
>
> Ma question est POURQUOI??
>
> Pour quoi faire un "test de paternité" [...]
>
> Pourquoi ce test ??

crainte des escroqueries à l'héritage ?

> merci

fu2 fcold

--
| Mon 1er est bête, l' horreur si sale ou méchant, fait pitié si n' |
| est que pauvre. Mon 2ème l' est aussi, mais plutôt benêt. Mon 3ème |
| adore les trous de serrure. Mon tout, bien ciblé, achète n' importe |
| quoi, surtout si c' est cher. ^<>^ http://rajao.dyndns.org |

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Benjamin BAYART
Le #7143601

Ma question est POURQUOI??



Pour plusieurs raisons:
1. le mec qui a crit ca a fait comme toi: il a cherche sur Internet,
mais, lui, il ne s'est pas pose de questions.
2. encore un programme qui decouche :-)
3. la question qui est traitee n'est pas "est-ce bien un de mes fils?"
mais plutot "est-ce bien celui de mes fils dont j'attend le deces?"

Pour quoi faire un "test de paternité" sur le signal sigchid ??



Dans un cas rare (forcement, puisqu'il est "un"), on peut recevoir
des SIGCHLD de fils illegitimes qui sont apparus magiquement: si un
process perd son fils, c'est entendu, il recoit SIGCHLD. Si un process
perd son pere (il ne recoit rien), il est adopte par "init". Et donc,
ce brave monsieur "init" recoit tous les SIGCHLD de tous les orphelins
du systeme.

Si je reçois un signal sigchild c'est que mon fils est mort non ????



Oui. Tu peux cependant le recevoir deux fois, sous certaines conditions
climatiques pourries (je n'ai plus la liste sous la main).

Les processus sous Linux on comme les Star de Cinéma ?
Passé un certain age il leur sort des fils de tous les cotés ?



Sous cette acception la, "init" est la seule star de ton systeme.

Il doit y avoir une réponses car ce qui m'inquiette c'est quand je
fait une rechercher sur des source C qui gère le signal SIGCHID, Ils
utilises Wait pidwait ou wait3 ou wait4 pour récupérer le pid du
défunt fils, mais ils testent tous que ce pid soit bien le fils ??



Tous les exemples que tu as vu testent que c'est bien le fils
attendu qui s'est termine, et pas un frangin sans interet.

Pourtant mes lecture sur le signal disent que SIGCHILD c'est la mort
de mon fils, et pas d'un cousin ou voisin alors ???



Si tu es dans un cas simple (tu lances un fils de temps en temps,
et tu attends patiemment qu'il ait termine son boulot avant de
reprendre le tien), alors, oui, le test est inutile.

Dans tout autre cas plus subtile, il te faut faire attention:
- tu peux recevoir le signal deux fois pour le meme process
fils (cas rare mais possible)
- tu peux ne recevoir le signal qu'une seule fois pour plusieurs
process en attente (ca, ca decoule du mode de fonctionnement
des signaux), il te faut alors trouver tous ceux de tes enfants
qui sont morts et prendre les actions en consequence (fermer
des pipes, liberer des ressources, reprendre ton travail, etc)

Pour plus de renseignements, se reporter au "Rifflet".

Cordialement,

Benjamin.

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Publicité
Poster une réponse
Anonyme