2014-12-07 76 views
2

我有一個Linux進程(C程序),它產生了一對子進程。我希望在系統級別的這些子進程中禁止另一個分叉,這樣如果這些進程試圖分叉,就會被殺死。如何實現這一目標?我更喜歡將此策略嵌入到主機C代碼中。 setrlimit(2)可以做到嗎?防止在子進程中分叉

+1

你可以發表一些代碼嗎?如果你只在你的父母過程中分叉,那麼在子女中將沒有辦法分叉/你如何看待子女分支 – chris 2014-12-07 22:44:50

+0

這個機制有多安全?您是否有任何特定的攻擊方案,或者它是用於調試? – 5gon12eder 2014-12-07 22:45:03

+0

@ 5gon12eder是的!絕對安全,因爲我執行不可信的子代碼。 – eeq 2014-12-07 22:45:59

回答

1

是的,setrlimit()可以做到這一點。請參閱手冊頁和

RLIMIT_NPROC
閱讀起來的最大進程數(或者,更準確地說在Linux上,線程)是 可以調用進程的真實用戶ID創建。在遇到此限制時,fork(2) 將失敗,並顯示EAGAIN錯誤。

或者,您可以使用/etc/security/limits.conf設置對進程的硬限制。查找文件中的一些示例。

#@student  hard nproc   20 
#@faculty  soft nproc   20 
#@faculty  hard nproc   50 
#ftp    hard nproc   0 
+0

我現在還不確定。你會如何限制子進程?他們繼承自己的限制。 Ptrace解決方案看起來更可行。 – eeq 2014-12-08 11:08:13