我接到一个家庭作业,要求我编写一个程序来检查用户可以创建多少个进程(在 Ubuntu 中运行)。我编写的代码在理论上似乎没问题。问题是,当我运行它时,系统会在 3-5 秒后关闭它并不允许它运行。我能想到的唯一原因是 Ubuntu 中嵌入了保护。有没有办法忽略这个问题并运行我的程序?我也尝试过以 root 权限运行它,但没有成功。
我的程序是如何工作的:第一个进程 fork() 一个新进程,父进程等待其子进程,然后新创建的进程创建另一个进程(再次 fork)并等待它,依此类推,直到 fork() 失败,然后我打印一个计数器。然后一切都存在,所以没有僵尸进程留下。
答案1
我认为你想看看/etc/security/limits.conf
,你很可能已经达到了一个定义的nproc
限制。手册页因为它描述了其中包含的限制。这很可能就是导致您尝试进行 forkbombing 失败的原因。
答案2
你可以看看ulimit -a
。在我的系统(Ubuntu 12.04)上,它给出:
$ ulimit -a
核心文件大小(块,-c)无限制
数据段大小(kbytes,-d)无限制
调度优先级(-e)0
文件大小(块,-f)无限制
待处理信号(-i)29951
最大锁定内存(kbytes,-l)64
最大内存大小(kbytes,-m)无限制
打开文件(-n)1024
管道大小(512 字节,-p)8
POSIX 消息队列(字节,-q)819200
实时优先级(-r)0
堆栈大小(kbytes,-s)8192
CPU 时间(秒,-t)无限制
最大用户进程数(-u)29951
虚拟内存(kbytes,-v)无限制
文件锁(-x)无限制
当您查看“最大用户进程数”(ulimit -u
)时,您会看到,我最多可以创建 29951 个进程。