首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Linux上,有哪些条件可能导致fork()或system()调用失败?

在Linux上,有哪些条件可能导致fork()或system()调用失败?
EN

Stack Overflow用户
提问于 2009-05-12 16:42:56
回答 2查看 18K关注 0票数 7

如何才能发现其中的任何一个正在发生,并导致由fork()或system()返回的错误?换句话说,如果fork()或system()返回一个错误,那么我可以在Linux中检查哪些东西来诊断为什么会发生特定的错误?

例如:

  • 只是内存不足(导致errno ENOMEM) -检查内存使用“空闲”等。
  • 没有足够的内存来复制父进程的页表和其他记帐信息,
  • 有全局进程限制吗?(结果也是EAGAIN?)
  • 是否有每个用户的进程限制?我怎样才能找出它is?
  • ...?
EN

回答 2

Stack Overflow用户

发布于 2009-05-12 16:46:06

,以及如何才能发现它们中是否有发生?

如果结果(返回值)为-1,则检查errno值。

来自Linux上的手册页:

返回值

成功后,子进程的PID在父进程中返回,0在子进程中返回。失败时,父进程中返回-1,没有创建子进程,并适当设置errno。偏误

阿加因

fork()无法分配足够的内存来复制父页表并为子任务结构分配任务结构。

阿加因

由于遇到了调用方的RLIMIT_NPROC资源限制,因此无法创建新进程。若要超过此限制,该流程必须具有CAP_SYS_ADMIN或CAP_SYS_RESOURCE功能。

ENOMEM

由于内存紧张,福克()未能分配必要的内核结构。符合SVr4,4.3BSD,POSIX.1-2001.

票数 7
EN

Stack Overflow用户

发布于 2009-05-12 16:54:27

nproc在/etc/security/ limit . can中可以限制每个用户的进程数。

您可以通过检查check的返回来检查失败。0表示您在子中,正数是子级的pid,表示您在父级,负数表示叉失败。当叉子失败时,它会设置外部变量errno。您可以使用errno.h中的函数来检查它。我通常只使用perror来打印错误(它前面加了一些文本)以进行stderr。

代码语言:javascript
运行
复制
#include <stdio.h>
#include <errno.h>
#include <unistd.h>

int main(int argc, char** argv) {
    pid_t pid;

    pid = fork();
    if (pid == -1) {
        perror("Could not fork: ");
        return 1;
    } else if (pid == 0) {
        printf("in child\n");
        return 0;
    };

    printf("in parent, child is %d\n", pid);

    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/853725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档