如何才能发现其中的任何一个正在发生,并导致由fork()或system()返回的错误?换句话说,如果fork()或system()返回一个错误,那么我可以在Linux中检查哪些东西来诊断为什么会发生特定的错误?
例如:
发布于 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.
发布于 2009-05-12 16:54:27
nproc在/etc/security/ limit . can中可以限制每个用户的进程数。
您可以通过检查check的返回来检查失败。0表示您在子中,正数是子级的pid,表示您在父级,负数表示叉失败。当叉子失败时,它会设置外部变量errno。您可以使用errno.h中的函数来检查它。我通常只使用perror来打印错误(它前面加了一些文本)以进行stderr。
#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;
}
https://stackoverflow.com/questions/853725
复制相似问题