我在一个进程中做了一个双叉(叉子,然后孩子再次叉子,我等待孩子,孙子由 init 处理),在孩子关闭后,我尝试从我在父母中打开的套接字读取前叉。每次运行程序时读取都会失败。
消息正在使用 sendto() 发送,它返回 ENOENT 错误代码。
这应该有效还是我[10]?
这是 fork 函数中的代码:
uint8_t
upgrade(
char *server,
char *file)
{
pid_t pid1, pid2;
int status;
if ((pid1 = fork()) < 0)
{
/* Fork error */
log("FAILED: First fork() failed");
}
else if (pid1 == 0)
{
/* First child */
if ((pid2 = fork()) < 0)
{
/* Fork error */
log("FAILED: Second fork() failed");
exit(0);
}
else if (pid2 == 0)
{
/*
execl("/usr/sbin/system_upgrade",
"system_upgrade", NULL);
*/
exit(0);
}
else
{
/* Second parent ie. First child
* Note: Exit cleanly so that second child
* gets reparented to init, and we avoid a zombie process */
exit(0);
}
}
else
{
/* First parent, wait for first child to exit */
if (waitpid (pid1, &status, 0) != pid1)
{
log("FAILED: waitpid() failed");
}
} /* FORK */
return OK;
}
编辑:删除额外的括号,固定缩进,再次将其标记为代码