【发布时间】:2025-12-16 05:40:01
【问题描述】:
我编写了以下程序来了解在没有 wait() 或 waitpid() 的情况下调用 fork 的工作方式。
int main()
{
pid_t childpid;
int retval = 0;
int i;
while(1){
//usleep(1);
childpid = fork();
if (childpid >= 0)
{
i++;
if (childpid == 0)
{
exit(retval);
}
else
{
//printf("childpid is %d\n", childpid);
}
}
else
{
printf("total no. of processes created = %d\n", i);
perror("fork");
exit(0);
}
}
}
这是我得到的输出->
total no. of processes created = 64901
fork: Cannot allocate memory
我希望程序在我立即退出子进程时继续运行,并且 fork() 应该在 pid > pid_max 之后重用 pid。为什么不会发生这种情况?
【问题讨论】:
-
我很惊讶你没有完全崩溃你的系统。通常有一个用户进程限制来避免这种类型的行为和分叉炸弹。
ulimit -u应该给你的系统一个非常大的进程限制。这是您系统中的一个主要漏洞。 -
ulimit -u 显示:31488。事实上,该程序甚至可以在后续尝试中运行。