我什麼時候需要使用waitpid函數,如果我使用的是execl的子進程可能需要一段時間才能完成?waitpid與execl用於兒童返回-1與ECHILD?
當我在父親中使用waitpid時,它給了我一個孩子,因爲waitpid的返回值是0.我嘗試在另一個函數中使用waitpid,在那裏它返回-1和ECHILD。如果我不確定天氣小孩是否完工,我應該何時使用waitpid?
//pid_t Checksum_pid = fork();
Checksum_pid = fork();
if (Checksum_pid == 0)
{
execl(path, name, argument as needed, ,NULL);
exit(EXIT_SUCCESS);
}
else if (Checksum_pid > 0)
{
pid_t returnValue = waitpid(Checksum_pid, &childStatus, WNOHANG);
if (returnValue > 0)
{
if (WIFEXITED(childStatus))
{
printf("Exit Code: _ WEXITSTATUS(childStatus)") ;
}
}
else if (returnValue == 0)
{
//Send positive response with routine status running (0x03)
printf("Child process still running") ;
}
else
{
if (errno == ECHILD)
{
printf(" Error ECHILD!!") ;
}
else if (errno == EINTR)
{
// other real errors handled here.
printf(" Error EINTR!!") ;
}
else
{
printf("Error EINVAL!!") ;
}
}
}
else
{
/* Fork failed. */
printf("Fork Failed") ;
}
的'出口(EXIT_SUCCESS);''的EXECL()'是錯誤的指示符之後;如果'execl()'返回,它失敗了,所以你應該使用'exit(EXIT_FAILURE)'退出,讓父進程知道你失敗了。 –
當我嘗試在execl和execl以下的子進程中使用printf時。我無法得到任何印花......我不知道爲什麼。我想上面execl我應該得到印刷品。我寫信嗎?如果execl成功,那麼如何退出子進程來終止它呢?如果我在父進程中使用waitpid(在某些執行後的其他函數中的某處),那麼使用waitpid與在父進程中獲得的第一個參數相同的childpid是否有效? – kapilddit