怎么能找出它们是否发生,并导致由fork()或system()返回的错误? 换句话说,如果fork()或system()返回一个错误,我可以检查一下Linux中有哪些东西来诊断为什么会发生这个特定的错误?
例如:
怎么能找出他们中的任何一个是否发生?
如果结果(返回值)是-1,请检查errno值
从Linux上的手册页:
返回值
成功时,子进程的PID在父进程中返回,并且在子进程中返回0。 如果失败,则在父项中返回-1,不创建子进程,并且适当地设置errno。错误
EAGAIN
fork()不能分配足够的内存来复制父页表,并为子分配一个任务结构。
EAGAIN
由于遇到了调用者的RLIMIT_NPROC资源限制,无法创建新进程。 要超过此限制,进程必须具有CAP_SYS_ADMIN或CAP_SYS_RESOURCE功能。
ENOMEM
fork()由于内存紧张而无法分配必要的内核结构。遵循SVr4,4.3BSD,POSIX.1-2001。
/etc/security/limits.conf中的nproc可以限制每个用户的进程数量。
您可以通过检查分叉返回来检查失败。 0意味着你在孩子身上,正数是孩子的PID,意味着你在父母身上,负数表示分叉失败。 当fork失败时,它设置外部变量errno。 你可以使用errno.h中的函数来检查它。 我通常只是使用perror打印错误(与一些文本预先)到标准错误。
#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; }