2014-12-07 45 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