gpt4 book ai didi

c - 信号处理程序的问题

转载 作者:行者123 更新时间:2023-11-30 16:04:46 25 4
gpt4 key购买 nike

当某个东西只打印两次代码时,它怎么能打印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 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

(我删除了重复的行,这样就不会占用太多空间)

谢谢,赫里斯托

最佳答案

从我们掌握的少量信息来看...

  1. 主进程创建pid = 16220的工作进程
  2. 工作进程 16220 运行并终止
  3. 信号处理程序运行,显然“head”列表中的第二个节点有一个进程 ID 16220 的记录(“stuff”打印两次,“inside if”打印一次)。
  4. 主进程创建pid = 16221的工作进程
  5. 工作进程 16221 运行并终止
  6. 信号处理程序运行,显然“head”列表中的第二个节点具有进程 ID 16221 的记录(“stuff”打印两次,“inside if”打印一次)。

这就是我们从您提供的数据中所能收集到的全部信息。如果您要向 waitpid 传递 stat 参数,您可以通过在处理程序中打印 termChildPID 和终止原因来了解工作进程终止的原因。

如果您的问题是为什么“stuff”打印两次,那么看看“head”指向什么。

关于c - 信号处理程序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2597113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com