2015-02-10 252 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)方法。