为什么超级用户可以比非特权用户运行更多的同步进程?

时间:2015-02-08 07:27:58

标签: c unix minix

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

设置用户的进程限制可以确保用户误用或恶意使用(如fork bomb)不能完全破坏系统(至少在理论上),从而保护系统。根进程可以继续启动和运行。

有时这是一个按用户设置(以保护其他用户),有时它是用户/根分割(以保护系统),有时它们都是。