回答
在Linux中,您可能要使用setrlimit。不过,不要打扰杀害孩子。当他们耗尽记忆时,他们会自己死去。
假设你在POSIX系统上,你可以在fork()
之后调用setrlimit(2)
来限制它。例如:
if (fork() == 0) {
struct rlimit limits;
limits.rlim_cur = 10000000; // set data segment limit to 10MB
limits.rlim_max = 10000000; // make sure the child can't increase it again
setrlimit(RLIMIT_DATA, &limits);
execv(...);
}
如果您的孩子进程试图超过此分配更多的内存,它不会自动杀死,但它将无法满足内存分配请求。如果儿童节目在这种情况下选择放弃,那么它会死亡。如果选择继续,则不会通知家长这种情况。
你可以使用一个整数作为'const struct rlimit *'第二个参数? – 2011-04-26 00:17:34
@Mike DeSimone:不,那是一个错误,我修正了它。 – 2011-04-26 00:18:08
+1比我的回答更完整(因此更有用)。 – 2011-04-26 00:19:46
阅读setrlimit
函数。你可能想是这样的:。
#include <sys/resource.h>
struct rlimit limits;
limits.rlim_cur = // soft limit
limits.rlim_max = // hard limit
int err = setrlimit(RLIMIT_DATA, &limits);
if(err) ...
这是假定/你写的Unix/Linux/BSD/Mac的等等,而不是Windows ...这似乎是一个很好的猜测,因为你使用execv
。
一些注意事项:软限制(rlim_cur
)可能会通知进程超出了限制。超过硬限制(rlim_max
)会使malloc()
失败,将errno
设置为ENOMEM
,这通常会导致进程死亡。阅读手册页或尝试一下,看看它如何在你的系统上运行。如果堆栈超过rlim_max
,则可能会收到SIGSEGV
信号。
通常,只有根进程可以引发rlim_max
。常规过程可以降低rlim_max
或将rlim_cur
设置为0到rlim_max
之间的任何值。
- 1. 限制.NET进程可以使用的最大内存量?
- 2. 如何限制我的C代码可访问的内存量?
- 3. 如何限制IIS Express的内存使用量/强制应用程序池recyle
- 4. 如何减少Socket应用程序的C#内存使用量
- 5. 限制可以在twiki中使用的变量的数量
- 6. 我可以通过它占用的内存量限制HashMap吗?
- 7. 如何限制可扩展存储引擎(JetBlue)的内存使用量?
- 8. 如何在一个月内限制应用程序的使用
- 9. 人工限制C/C++内存使用
- 10. 的内存限制应用程序可用
- 11. 限制人们可以在foswiki中使用的变量数量
- 12. 设置我的程序可以产生的进程数限制
- 13. 如何保存存储在内存中的动态生成的程序集?
- 14. C程序可以在与生成相同的生成文件中执行吗?
- 15. 在iOS应用程序中保存用户生成的内容
- 16. 如何在执行期间测量C/C++/Java程序使用的内存?
- 17. 使用System.Addin与内存中生成的程序集
- 18. 如何在require()时限制内存使用量?
- 19. 限制常驻内存使用量
- 20. 限制内存使用量Eclipse
- 21. 限制JTextPane内存使用量
- 22. 限制JVM可以使用的活动线程/内核的数量
- 23. OS X是否限制次要线程的内存使用量?
- 24. mysql - 我可以确定或限制允许使用的内存查询量
- 25. 我可以限制我的C#应用程序
- 26. 生成html页面的C#程序 - 限制图像尺寸
- 27. 如何限制可以由特定类分配的内存?
- 28. 如何超过ASP.NET缓存应用程序中IIS7的60%内存限制
- 29. 使用C#/ C++,是否可以限制网络流量?
- 30. 是否有任何限制/限制我们可以放在Android应用程序中的广告数量?
什么平台? C++不能单独做到这一点;它不知道过程的概念。但你的平台可能会这样做。 – 2011-04-26 00:09:41
@Billy考虑到他打算使用execv,我猜测他是在Unix下。但是,好点。 – 2011-04-26 00:15:59
@Etienne:原来的问题没有那个珍闻。 – 2011-04-26 01:06:07