我在Ubuntu上用C运行一种"沙盒":它需要一个程序,并在用户下安全地运行它nobody
(并拦截信号等).此外,它还分配内存和时间限制,并测量时间和内存使用情况.
(如果你很好奇,那就是为了在测试数据上标记程序的某种"在线判断")
目前,我已经适应了safeexec从模块mooshak.虽然大多数东西都能正常工作,但内存使用似乎是一个问题.(这是非常不准确的)
现在我已经尝试了这里的建议并解析了VM /proc/pid/stat
,现在修复了准确性问题.但是,对于快速完成的程序,它不起作用,只返回0.
该safeexec程序看起来像这样的工作:
它fork()
ŝ
使用execv()
在子进程来运行所需的程序
监视来自父进程的程序,直到子进程终止(使用wait4
,这恰好返回CPU使用情况 - 但不是内存?)
因此它解析/proc/../stat
子进程(已被execv替换)
那么为什么VM /proc/child_pid/stat
有时等于0?
是因为execv()完成得太快,而且/proc/child_pid/stat
只是不可用?
如果是这样,是否有某种其他方式来获取孩子的内存使用情况?
(因为这是为了在一个时间限制内判断程序,我承担不起像valgrind这样的性能损失的东西)
提前致谢.