【问题标题】:What's the scope of ulimit -u?ulimit -u 的范围是什么?
【发布时间】:2015-02-10 11:40:52
【问题描述】:

ulimit -u是否设置了上限:

  1. 创建的进程数从调用它的进程降序排列?
  2. 考虑已经使用相同(有效、文件系统、真实、已保存?)用户 ID 运行的进程数?
  3. 可跨 POSIX 系统移植?

部分答案似乎可以通过help ulimitman $(basename $SHELL)setrlimit(3) 的推断获得,或者通过查看

$ ulimit -u 708 | ulimit -u
709
$

在管道命令中对 shell 的(子)进程分配机制进行了一些假设。 (这是上面示例中的硬性限制。)是否有一个综合资源可供学习或参考,实际上侧重于 Unix/POSIX 资源管理?

详细说明列表项 1.,考虑两个登录 shell,limits -u 分别为 200 和 100。还有fork bomb

bomb() {   # increment and output cnt, pipe to new process
    cnt=$1; cnt=$((cnt + 1)); echo $cnt; sleep 1;
    echo | bomb $cnt;
}

我在 200-processes-shell 中运行 bomb。考虑到另一个 shell 中设置的 100 个限制,我应该期望终止接近 200 个进程还是接近 100 个进程?

这是我看到的:

$ bomb 1
2
3
...
196
197
-bash: fork: retry: No child processes
-bash: fork: retry: Resource temporarily unavailable

【问题讨论】:

    标签: shell unix process resources


    【解决方案1】:
    1. 创建的进程数从调用它的进程降序排列?

    不只是这些进程,限制影响用户启动的所有进程(相同的uid)

    1. 考虑已经使用相同(有效、文件系统、真实、已保存?)用户 ID 运行的进程数?

    它考虑了它们,更准确地说,它计算了共享相同用户 ID 的每个线程。

    1. 可跨 POSIX 系统移植?

    不保证。这是 POSIX shell 标准中未定义的 bashism,ulimit 仅支持文件大小限制。它可能会或可能不会实现,具体取决于底层操作系统,因为没有可移植(POSIX)方法来做到这一点。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2010-11-01
      • 2011-11-11
      • 2020-10-18
      • 2017-04-22
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多