2

(注意:提到的程序是为课堂作业编写的,但这个问题不是作业的一部分;这是出于我自己的好奇心,我在其他地方找不到答案。)

对于课堂作业,我需要编写一个程序来确定用户一次可以运行的同时进程数。我的程序在返回 -1 之前创建了一定数量的进程,fork()因为已达到限制,然后它终止这些进程并结束。

当我运行 asroot时,它会在终止它们之前计算 16 个创建的进程,这是有道理的。Minix 2手册页fork()指定限制由NR_PROCSin 中的变量设置/usr/include/minix/config.h,并且设置为 32。root除了程序创建的 14 个进程(shell 和程序本身为 +2)之外,它还运行 16 个进程,因此总共有32个进程。

但是,当我以非特权用户身份运行ast时,该程序仅返回 13(因此它仅生成 11 个进程以及两个用于 shell 和程序的进程)。我习惯以用户su ast身份运行ast,但我不知道是否考虑了该过程。更新:登录 asast会导致程序产生 12 个进程,因此为 shell 添加两个进程和程序本身意味着ast只能同时运行 14 个进程(用户没有运行任何其他进程)。

为什么超级用户和非特权用户可以运行的进程数量存在差异,尤其是当只有一个变量控制系统限制时?

4

1 回答 1

0

设置用户的进程限制通过确保用户的误用或恶意使用(如分叉炸弹)不能完全破坏系统(至少理论上如此)来保护系统。根进程可以继续启动和运行。

有时这是针对每个用户的设置(以保护其他用户),有时是用户/root 拆分(以保护系统),有时两者兼而有之。

于 2015-03-20T12:50:17.297 回答