(注意:上面提到的程序是为课堂作业而写的,但这个问题不是作业的一部分;这是我自己的好奇心,我在其他地方找不到答案。)
对于一个类作业,我需要编写一个程序来确定用户可以同时运行的同时进程的数量。我的程序在fork()
返回-1之前创建了一定数量的进程,因为已经达到了限制,然后它终止这些进程并结束。
当我以root
的身份运行时,它会在终止16个创建的进程之前对它们进行计数,这是有道理的。fork()
的Minix 2手册页指定限制由/usr/include/minix/config.h
中的NR_PROCS
变量设置,并设置为32。除了程序创建的14个进程(shell和程序本身为+2)之外,root
还运行16个进程,因此总共有32个进程。
然而,当我以无特权用户ast
的身份运行时,程序只返回13(因此它只生成11个进程,外加shell和程序的两个进程)。我使用su ast
作为ast
用户运行,但我不知道是否考虑了这个过程更新:以ast
身份登录会导致程序生成12个进程,因此为shell和程序本身添加这两个进程意味着ast
只能同时运行14个进程(用户没有运行任何其他进程)。
为什么超级用户和无特权用户可以运行的进程数量不同,尤其是当只有一个变量控制系统限制时?
设置用户的进程限制可以通过确保用户的错误使用或恶意使用(如叉式炸弹)不会完全破坏系统(至少在理论上)来保护系统。根进程可以继续启动和运行。
有时这是按用户设置(以保护其他用户),有时这是用户/根划分(以保护系统),有时两者兼而有之。