(注意:提到的程序是为课堂作业编写的,但这个问题不是作业的一部分;这是出于我自己的好奇心,我在其他地方找不到答案。)
对于类分配,我需要编写一个程序来确定用户可以同时运行的同时进程数。我的程序在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个并发进程(用户没有运行任何其他人。)
为什么超级用户和非特权用户可以运行的进程数量存在差异,尤其是当只有一个变量控制系统限制时?
答案 0 :(得分:0)
设置用户的进程限制可以确保用户误用或恶意使用(如fork bomb)不能完全破坏系统(至少在理论上),从而保护系统。根进程可以继续启动和运行。
有时这是一个按用户设置(以保护其他用户),有时它是用户/根分割(以保护系统),有时它们都是。