我做了一个双叉(fork,然后孩子再次分叉,我等待孩子,孙子由init处理)在一个过程中,在孩子关闭后我尝试从我打开的套接字读取在fork之前的父级中。每次运行程序时读取都会失败。
使用sendto()发送消息,该消息返回错误代码ENOENT。
这应该有效还是我[10]?
以下是函数中的代码:
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;
}
编辑:删除额外的括号,修复缩进,再次将其标记为代码