(注:提到的程序是爲課堂作業寫的,但這個問題是不是任務的一部分,它是爲我自己的好奇心,我無法在別處找到答案。)爲什麼超級用戶可以比非特權用戶運行更多的同時進程?
對於課堂作業,我需要編寫一個程序來確定一次可以同時運行的同時進程的數量。我的程序在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個進程(用戶不運行任何其他進程)。
爲什麼超級用戶和非特權用戶可以運行的進程數有所不同,尤其是當只有一個變量控制系統限制時?
是的,'su ast'是一個進程,然後它爲'ast'分支一個shell,這是另一個進程。如果您以「ast」登錄並運行,會發生什麼情況? – 2015-02-08 07:39:11
@Blue Moon我考慮過這樣做,但是作爲'ast'的登錄被禁用('/ etc/passwd'中的條目在將要寫入密碼的地方給出'*',這意味着它是無效的)。明天當我有更多時間在系統上忙亂時,我會試試看;今晚的大部分內容都是實際編寫程序。 – vaindil 2015-02-08 10:18:15
@BlueMoon我啓用登錄爲'ast'用戶並運行程序;它報告了14個過程。 'ast'只運行另外一個進程'-sh',這在程序中佔了上風,所以看起來'ast'用戶實際上只能同時產生14個進程,而與'root'32相比,假設我的代碼是正確的。 – vaindil 2015-02-08 22:33:35