2015-02-10 251 views
2

这是真的,ulimit -u设置一个上限:ulimit -u的范围是什么?

  1. 在其中它被称为从工艺降序创建的进程的数量?
  2. 考虑到已经运行相同(有效,文件系统,实际,保存?)用户ID的进程数量?
  3. portably accross POSIX systems?

部分答案似乎通过推理,以从help ulimitman $(basename $SHELL)setrlimit(3),或望着

$ ulimit -u 708 | ulimit -u 
709 
$ 

的输出与有关管道命令的shell的(子)进程分配机制的一些假设。 (在上面的例子中,这是一个硬性限制。)是否有一个全面的资源,用于学习或参考,实际上是关注Unix/POSIX资源管理?

详细描述在列表项目1上,考虑两个登录shell分别为0123和1000600,这两个登录shell分别是200和100的limits -u。还一个fork bomb

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

我运行在200的过程 - 壳bomb。我是否应该预计终止接近200个进程或接近100个进程,给定另一个shell中设置的100个限制?

这是我所看到的:

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

回答

1
  1. 在调用它从工艺降创建的进程数?

不仅这些方法中,限制影响由用户发起(相同的UID)

  • 考虑到工序数的所有过程已经运行与相同(有效,文件系统,真实,保存?)用户ID?
  • 它将它们考虑在内,更准确地说,它是对每个共享相同用户ID的线程进行计数。

    1. portability across POSIX systems?

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