ulimit -u的范围是什么?

时间:2015-02-10 11:40:53

标签: shell unix process resources

ulimit -u是否设置了上限:

  1. 关于从调用它的进程开始创建的进程数?
  2. 考虑已使用相同(有效,文件系统,真实,已保存?)用户ID运行的进程数量?
  3. 可以兼容POSIX系统吗?
  4. 部分答案似乎可以通过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
    

1 个答案:

答案 0 :(得分:1)

  
      
  1. 关于从调用它的进程开始创建的进程数?
  2.   

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

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

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

  
      
  1. 可以兼容POSIX系统吗?
  2.   

不保证。这是POSIX shell标准中未定义的基础,ulimit仅支持文件大小限制。它可能会也可能不会实现,具体取决于底层操作系统,因为没有便携式(POSIX)方法。