【发布时间】:2010-04-08 02:10:19
【问题描述】:
当它只打印两次代码时,它怎么能打印 3 次?我正在用 C 编码,代码在我创建的 SIGCHLD 信号处理程序中。
void chld_signalHandler() {
int pidadf = (int) getpid();
printf("pidafdfaddf: %d\n", pidadf);
while (1) {
int termChildPID = waitpid(-1, NULL, WNOHANG);
if (termChildPID == 0 || termChildPID == -1) {
break;
}
dll_node_t *temp = head;
while (temp != NULL) {
printf("stuff\n");
if (temp->pid == termChildPID && temp->type == WORK) {
printf("inside if\n");
// read memory mapped file b/w WORKER and MAIN
// get statistics and write results to pipe
char resultString[256];
// printing TIME
int i;
for (i = 0; i < 24; i++) {
sprintf(resultString, "TIME; %d ; %d ; %d ; %s\n",i,1,2,temp->stats->mboxFileName);
fwrite(resultString, strlen(resultString), 1, pipeFD);
}
remove_node(temp);
break;
}
temp = temp->next;
}
printf("done printing from sigchld \n");
}
return;
}
我的 MAIN 进程的输出是这样的:
MAIN PROCESS 16214 created WORKER PROCESS 16220 for file class.sp10.cs241.mbox
pidafdfaddf: 16214
stuff
stuff
inside if
done printing from sigchld
MAIN PROCESS 16214 created WORKER PROCESS 16221 for file class.sp10.cs225.mbox
pidafdfaddf: 16214
stuff
stuff
inside if
done printing from sigchld
MONITOR 进程的输出是这样的:
MONITOR: pipe is open for reading
MONITOR PIPE: TIME; 0 ; 1 ; 2 ; class.sp10.cs225.mbox
MONITOR PIPE: TIME; 0 ; 1 ; 2 ; class.sp10.cs225.mbox
MONITOR PIPE: TIME; 0 ; 1 ; 2 ; class.sp10.cs241.mbox
MONITOR: end of readpipe
(我已经把重复的行去掉了,所以我不占用太多空间)
谢谢, 赫里斯托
【问题讨论】:
-
这是重复的,因为有人在没有给我回复机会的情况下关闭了我的帖子。
-
如果您的问题第一次被关闭,是什么让您认为第二次会做得更好?不要重复发布,至少想出一个真实的标题。
-
你需要做的是返回并编辑你原来的问题,这样代码的格式会更好,它有一个描述性的标题,并被标记(阅读:分类) 正确。然后去 meta.stackoverflow.com 发帖解释你解决了这个问题并请求人们投票重新打开它。
-
@Joel Coahoorn:在他编辑之前它已经关闭,因为当时这个问题没有意义。这不是他最初的问题的欺骗,这只是这次正确发布问题的正常尝试。