【问题标题】:Why can superusers run more simultaneous processes than unprivileged users?为什么超级用户可以比非特权用户同时运行更多的进程?
【发布时间】: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 astast 用户身份运行,但我不知道是否考虑了该过程。 更新:ast 登录会导致程序产生 12 个进程,因此为 shell 和程序本身添加两个意味着 ast 只能同时运行 14 个进程(用户未运行任何其他)。

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

【问题讨论】:

  • 是的,su ast 是一个进程,然后它为ast 派生一个 shell,这是另一个进程。如果您以ast 登录并运行会发生什么?
  • @Blue Moon 我考虑过这样做,但以ast 登录被禁用(/etc/passwd 中的条目在要写入密码的地方给出*,这意味着它无效) .明天我有更多时间来搞定系统时,我会试一试;今晚的大部分时间都是在编写程序。
  • @BlueMoon 我启用了以ast 用户身份登录并运行程序;它报告了 14 个进程。 ast 只运行另一个进程 -sh,这在程序中已经说明,所以看起来 ast 用户实际上一次只能生成 14 个进程,而 root 的 32 个进程,假设我代码正确。

标签: c unix minix


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2015-07-12
    • 2020-01-05
    • 2016-03-24
    • 2019-01-18
    • 2017-07-18
    • 1970-01-01
    • 2019-12-31
    相关资源
    最近更新 更多