Aucun Enfant d'Erreur du Processus de waitpid() lors de l'attente pour le processus de groupe
L'écriture de mon propre jouet shell, et ont une bosse en essayant de mettre en œuvre le contrôle du travail.
Je suis en train de le groupe de processus de l'enfant, à la fois chez l'enfant et le parent avec setpgid. Mon attente appel:
pid = waitpid(-pid, &status, 0)
Cependant, waitpid renvoie -1 et perror dit "Pas de processus enfant". Cependant, il ne semble pas attendre à chaque fois. Aussi, ps de sortie ressemble à droite pour signifier lorsqu'il est exécuté par le shell. Depuis ps parent est un processus kbsh comme je m'attends.
% ps -o pid,ppid,pgrp,session,tpgid,comm
Forking
In Parent: Setting process group to 20809 of process 20809 with setpgid
In Child Processes, pid of child process is 20809
in Child: Setting process group to 20809 of process 20809 with setpgid
Requesting that Process Group 20809 becomes the foreground process with tcsetpgrp
Waiting for job with process group 20809
PID PPID PGRP SESS TPGID COMMAND
12002 32573 12002 12002 20809 zsh
20808 12002 20808 12002 20809 kbsh
20809 20808 20809 12002 20809 ps
Wait Error: No child processes
Restoring Shell process group 20808 to forground
Quelqu'un voit ce que je fais de mal? pouvez poster plus de code si besoin...
- semble se produire avec -1 et-pid
- A ignorning SIGCHILD, c'est la raison pour laquelle il ne fonctionnait pas 😛
Vous devez vous connecter pour publier un commentaire.
J'étais ignorant sigchld, à partir de la waitpid homme page:
Vous n'avez pas à définir le processus de l'ID de groupe. L'enfant hérite de l'objet parent pid comme groupe par défaut.
Lorsque vous attendez, vous avez besoin d'attendre pour le parent pid:
J'ai trouvé ce fil, tout en essayant de mettre en œuvre une minuscule coquille pour mon cours d'informatique, et pensé que je voudrais partager ce qui a fonctionné pour moi. J'ai fait le message d'erreur suivant:
Dans mon cas, j'ai été en utilisant un wrapper fournies par les Systèmes Informatiques:
D'un point de vue du Programmeur manuel. Pour réparer mon erreur, j'ai changé
Waitpid
danscsapp.c
deà