klewan
01-05-2006, 11:57
hallo, ich hab in etwa folgenden code
int running;
void sched_reaper(int signum) {
int status;
while (waitpid (-1, &status, WNOHANG) > 0) {
}
running--;
}
running=0;
signal(SIGCHLD, reaper);
for(x=0; x<10; x++) {
child_pid=fork();
switch(child_pid) {
case -1:
_log("FORK Error");
return -1;
break;
case 0:
signal(SIGCHLD, reaper);
//bisschen code
exit(0);
break;
default:
running++;
}
while(running != 0) {
printf("waiting...");
}
mein problem is das dies zu 99.9% gut geht aber ab und an wird anscheinend kein sigchld ausgelöst, dann wenn der child-code irgendwie abkackt (externer code) den ich mal, was dann zu folge hat das "running" z.b.: 1 ist obwohl kein process mehr läuft
meine frage:
im gdb hab ichs nicht gebacken bekommen fork()'s zu debuggen, bzw die signal's zu sehen, irgend eine idee?
welche signal's muss ein child abfangen, ich denk da z.b. an den fall das der child code segfault'ed (sollt zwar nicht sein, aber ist externer code)
int running;
void sched_reaper(int signum) {
int status;
while (waitpid (-1, &status, WNOHANG) > 0) {
}
running--;
}
running=0;
signal(SIGCHLD, reaper);
for(x=0; x<10; x++) {
child_pid=fork();
switch(child_pid) {
case -1:
_log("FORK Error");
return -1;
break;
case 0:
signal(SIGCHLD, reaper);
//bisschen code
exit(0);
break;
default:
running++;
}
while(running != 0) {
printf("waiting...");
}
mein problem is das dies zu 99.9% gut geht aber ab und an wird anscheinend kein sigchld ausgelöst, dann wenn der child-code irgendwie abkackt (externer code) den ich mal, was dann zu folge hat das "running" z.b.: 1 ist obwohl kein process mehr läuft
meine frage:
im gdb hab ichs nicht gebacken bekommen fork()'s zu debuggen, bzw die signal's zu sehen, irgend eine idee?
welche signal's muss ein child abfangen, ich denk da z.b. an den fall das der child code segfault'ed (sollt zwar nicht sein, aber ist externer code)