gpt4 book ai didi

c - waitpid 不工作- efault 错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:22 24 4
gpt4 key购买 nike

我正在尝试创建一个在一个文件中运行 exec 的分支,然后等待它完成。如果子进程中的 exec 被信号终止,我想打印信号,如果程序运行时间太长,我想打印超时。

        pid_t pid;
pid = fork();

if(pid == 0) {
//child process
}
else {
alarm(timeout);
int status;
if(wait(pid, &status, 0) == pid) {
alarm(0);
fpw = fopen(testreport, "a+");
if(WIFSIGNALED(status)) {
fprintf(fpw, "Run time errors: signal %d\n", WTERMSIG(status);
}
else {
fprintf(fpw, "Run time errors: none");
}
fclose(fpw);
}
else {
alarm(0);
kill(pid, SIGTERM);
fpw = fopen(testreport, "a+");
fprintf(fpw, "Run time errors: timeout\n");
fclose(fpw);
}
}

Testreport 是一个先前声明的 char * 文件名。虽然 waitpid 不工作。当我打印 waitpid 和 errno 的值时,我分别得到 -1 和 14。我查找了 errno 14,它是一个 EFAULT,这表明状态地址无效。怎么会这样?

最佳答案

建议:

  1. 将 -Wall 添加到您的 gcc 参数中。

  2. 更多错误检查。在您的代码中,fork() 可能会返回 -1,而 -1 是 waitpid 的有效输入,这可能是由于不同的行为。

关于c - waitpid 不工作- efault 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com