【发布时间】:2015-02-08 07:27:57
【问题描述】:
(注意:提到的程序是为课堂作业编写的,但这个问题不是作业的一部分;这是出于我自己的好奇心,我在其他地方找不到答案。) p>
对于课堂作业,我需要编写一个程序来确定用户一次可以运行的同时进程数。我的程序在fork()返回-1之前创建了一定数量的进程,因为已达到限制,然后它终止这些进程并结束。
当我以root 运行时,它会在终止它们之前计算 16 个创建的进程,这是有道理的。 Minix 2 man page for fork() 指定限制由/usr/include/minix/config.h 中的NR_PROCS 变量设置,即设置为 32。root 除了程序创建的 14 个进程外,还运行 16 个进程(+2 表示shell 和程序本身),所以总共有 32 个进程。
但是,当我以非特权用户ast 运行时,程序只返回 13 个(因此它只产生 11 个进程加上 shell 和程序的两个)。我使用su ast 以ast 用户身份运行,但我不知道是否考虑了该过程。 更新: 以ast 登录会导致程序产生 12 个进程,因此为 shell 和程序本身添加两个意味着 ast 只能同时运行 14 个进程(用户未运行任何其他)。
为什么超级用户和非特权用户可以运行的进程数量存在差异,尤其是当只有一个变量控制系统限制时?
【问题讨论】:
-
是的,
su ast是一个进程,然后它为ast派生一个 shell,这是另一个进程。如果您以ast登录并运行会发生什么? -
@Blue Moon 我考虑过这样做,但以
ast登录被禁用(/etc/passwd中的条目在要写入密码的地方给出*,这意味着它无效) .明天我有更多时间来搞定系统时,我会试一试;今晚的大部分时间都是在编写程序。 -
@BlueMoon 我启用了以
ast用户身份登录并运行程序;它报告了 14 个进程。ast只运行另一个进程-sh,这在程序中已经说明,所以看起来ast用户实际上一次只能生成 14 个进程,而root的 32 个进程,假设我代码正确。