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 😛
InformationsquelleAutor Kyle Brandt | 2009-10-22