跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 execlp()和 waitpid()的一个问题
未分類
29 8 月 2020

关于 execlp()和 waitpid()的一个问题

关于 execlp()和 waitpid()的一个问题

資深大佬 : zxCoder 6

我在读一个 OJ 判题核心的代码,里面关于特判的代码,fork 了一个子进程,调用 execlp()去执行 spj,没有报错,但是父进程里 waitpid()就报错了,返回值是-1,错误码 10,no child processes,这是怎么回事

    int status = 0;     pid_t pid_spj = fork();     if (pid_spj < 0) {         LOG_WARNING("error for spj failed, %d:%s", errno, strerror(errno));         output_result(judge_conf::OJ_SE, -errno, judge_conf::EXIT_COMPARE_SPJ_FORK);         exit(judge_conf::EXIT_COMPARE_SPJ_FORK);     } else if (pid_spj == 0) {         freopen(file_spj.c_str(), "w", stdout);         if (EXIT_SUCCESS == malarm(ITIMER_REAL, judge_conf::spj_time_limit)) {             log_close();             if (execlp((spj_path + "/" + problem::spj_exe_file).c_str(),                        problem::spj_exe_file.c_str(), input_file.c_str(),                        output_file.c_str(), output_file_std.c_str(), NULL) < 0) {                 printf("spj execlp errorn");             }         }     } else {         //no child process         if (waitpid(pid_spj, &status, 0) < 0) {             LOG_BUG("waitpid failed, %d:%s", errno, strerror(errno));             output_result(judge_conf::OJ_SE, -errno, judge_conf::EXIT_COMPARE_SPJ_WAIT);             exit(judge_conf::EXIT_COMPARE_SPJ_WAIT);         }     }  

大佬有話說 (1)

  • 資深大佬 : Nitroethane

    错误码给你说了啊,没有子进程。waitpid 函数是父进程等待子进程的结束,如果返回 ECHILD,也就是 10,说明调用进程没有 PID 为 pid_spj 的子进程

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具