Traitement du Signal SIGCHLD
Dans Unix, lorsqu'un enfant de processus en arrière-plan se termine, il envoie un SIGCHLD
signal à la société mère pour l'informer qu'elle a mis fin.
Fait la même chose se produire même si le processus a été à l'avant-plan? Si oui, cela signifie que le parent aura juste l'ignorer.
Est-ce exact? Ou si c'est en avant-plan, alors qu'aucun signal n'est envoyé à tous?
Oui, SIGCHLD est également envoyé pour les processus de premier plan, je crois. Vous pourriez vérifier avec strace.
Avez-vous l'essayer?
Avez-vous l'essayer?
OriginalL'auteur darksky | 2012-03-23
Vous devez vous connecter pour publier un commentaire.
l'avant et l'arrière sont le contrôle du travail des concepts, et font partie de la coquille. Ils sont appliqués à des processus et n'affectent pas le processus qui a engendré (exec-ed) un autre processus.
Un processus enfant est le résultat d'un fork()-exec() de l'appel. L'enfant obtient un parent pid du processus qui a exécuté l'appel fork (). C'est le contexte de la SIGCHLD, le parent pid reçoit le signal SIGCHLD. Il n'est pas question de savoir si le processus de l'enfant est "premier plan" ou "arrière-plan", seul le ppid questions sur la sortie du processus.
SIGCHLD
signal? Dans le code que j'ai écris, il semble qu'il l'envoie dès qu'il commence à s'exécuter, qui semble mal..L'exécutable est-il dans le cadre du processus rundown - la partie où il ferme les descripteurs de fichiers ouverts, etc., alors que votre processus est en cours d'arrêt. Il y a (selon l'application), un fichier de crt0.o (peuvent avoir d'autres noms), qui est liée à chaque image exécutable. Il a quelques entrypoints comme _start(), _cleanup(), etc. Ceux-ci sont appelés après votre main() renvoie ou le processus des appels _exit() ou exit(). _start() appelle la fonction main(), BTW. De toute façon, ce code envoie le signal à la société mère.
est envoyé par le noyau.
le noyau n'a en effet de LIVRER le signal. En la regardant, HPUX 10i, par exemple, liés à l'objet soulève signal via la tuer.
N'est-ce pas l'inverse? Conformément à la norme POSIX, le parent devient le pid de l'enfant, alors que l'enfant se met à 0. pubs.opengroup.org/onlinepubs/009695399/functions/fork.html
OriginalL'auteur jim mcnamara
Il n'y a pas une telle chose comme de premier plan de l'enfant. Le terme de processus d'arrière-plan est utilisé pour référez-vous simplement que nous sommes principalement de traiter avec le processus parent (ce qui peut créer un processus fils pour faire une partie de son travail). Lorsqu'un enfant quitte
SIGCHLD
est toujours envoyé au processus parent. Cependant, le processus parent ignore souvent. Si le parent veut traiter avec la sortie de l'enfant Ou de faire quelque action seulement après la sortie de l'enfant, alors il peut utiliser le wait() appel système pour obtenir le statut de processus enfant.OriginalL'auteur P.P.