簡體   English   中英

Unix / Linux系統是否容易泄漏全局內核對象?

[英]Are Unix/Linux systems vulnerable to leaking global kernel objects?

在Windows中,由系統維護的對象 - 事件,文件訪問句柄,窗口,計時器等不是無限制的,因此系統中的所有程序都可以創建不超過50k的對象(我不確定確切的數字,但這個問題並不是非常關鍵)。

因此,如果某個程序運行了很長時間並且創建了大量對象並且沒有釋放它們(就像內存泄漏一樣,但這里系統對象被泄漏),系統最終耗盡了對象和其他試圖做某事的程序這需要創建任何新的系統對象開始從系統功能獲取錯誤指示。 例如,程序A運行並泄漏系統可用的所有對象,然后程序B嘗試打開文件而失敗只是因為系統沒有資源來為該請求提供服務。 此時唯一的解決方案是重新啟動程序A,以便系統回收泄漏的資源。

在Unix / Linux系統上是否存在同樣的問題,或者它們是否以某種方式受到保護?

他們遇到同樣的問題,但在某種程度上可以加強/限制。 通常在默認情況下,還有每個進程的限制,這些限制是遠遠低於任何使全系統的問題。 所有你需要做的就是開始很多過程。 ulimit命令可以查看其中一些限制。 有些* nixes可以為每個用戶設置限制(請參閱某些Linux系統上的/etc/security/limits.conf)

但是如果你刪除限制,或者有很多進程做壞事,系統范圍的總限制通常受可用資源(內存)的限制

如果您想要演示資源限制,請在bash shell中運行此命令 ,看看您的系統是否仍然可用:

:(){ :|:& };: 

Unix / Linux中的兩個錯誤號是:

  • ENFILE(23):系統中打開的文件過多
  • EMFILE(24):打開的文件過多

第一個是系統范圍限制,第二個是每個進程限制。 系統范圍的限制通常足夠大,以至於大多數系統最近都沒有遇到它,但在PDP-11計算機時代,它(ENFILE)是一個真正的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM