プロセスでダブルフォーク(フォーク、次に子フォーク、子を待つ、孫はinitによって処理される)を実行し、子が閉じた後、親で開いていたソケットから読み取ろうとしますフォークの前。プログラムを実行するたびに読み取りが失敗します。
メッセージは、ENOENT のエラー コードを返す sendto() を使用して送信されています。
これは機能するはずですか、それとも私は [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;
}
編集:余分なブラケットを削除し、インデントを修正し、再度コードとしてマークしました