2015-02-08 28 views
2

(注:提到的程序是爲課堂作業寫的,但這個問題是不是任務的一部分,它是爲我自己的好奇心,我無法在別處找到答案。)爲什麼超級用戶可以比非特權用戶運行更多的同時進程?

對於課堂作業,我需要編寫一個程序來確定一次可以同時運行的同時進程的數量。我的程序在fork()返回-1之前創建了一定數量的進程,因爲已達到限制,然後它終止這些進程並結束。

當我作爲root運行時,它在終止它們之前統計了16個創建的進程,這很有意義。 Minix 2 man page for fork()指定該限制由/usr/include/minix/config.h中的NR_PROCS變量設置,並且該值設置爲32. root除了由程序創建的14(shell和程序本身的+2)外,還運行了16個進程,所以總共有32個進程。

然而,當我作爲非特權用戶ast運行時,程序只返回13(因此它只產生11個進程加上兩個shell和程序)。我使用su ast作爲ast用戶運行,但我不知道是否考慮了該過程。 更新:ast登錄會導致程序產生12個進程,因此將兩個shell和程序本身添加到一起意味着ast只能同時運行14個進程(用戶不運行任何其他進程)。

爲什麼超級用戶和非特權用戶可以運行的進程數有所不同,尤其是當只有一個變量控制系統限制時?

+2

是的,'su ast'是一個進程,然後它爲'ast'分支一個shell,這是另一個進程。如果您以「ast」登錄並運行,會發生什麼情況? – 2015-02-08 07:39:11

+0

@Blue Moon我考慮過這樣做,但是作爲'ast'的登錄被禁用('/ etc/passwd'中的條目在將要寫入密碼的地方給出'*',這意味着它是無效的)。明天當我有更多時間在系統上忙亂時,我會試試看;今晚的大部分內容都是實際編寫程序。 – vaindil 2015-02-08 10:18:15

+0

@BlueMoon我啓用登錄爲'ast'用戶並運行程序;它報告了14個過程。 'ast'只運行另外一個進程'-sh',這在程序中佔了上風,所以看起來'ast'用戶實際上只能同時產生14個進程,而與'root'32相比,假設我的代碼是正確的。 – vaindil 2015-02-08 22:33:35

回答

0

設置用戶的進程限制通過確保用戶的錯誤使用或惡意使用(如fork bomb)不能完全破壞系統(理論上至少)來保護系統。根進程可以繼續啓動並運行。

有時這是每個用戶設置(以保護其他用戶),有時它是用戶/根分離(以保護系統),有時它是兩者。

相關問題