Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C setrlimit能否用于在一段时间内强制执行资源使用限制?_C_Linux_Setrlimit - Fatal编程技术网

C setrlimit能否用于在一段时间内强制执行资源使用限制?

C setrlimit能否用于在一段时间内强制执行资源使用限制?,c,linux,setrlimit,C,Linux,Setrlimit,我想为execv生成的程序可以使用一定数量的内存和一定数量的CPU时间设置限制。例如,我想设置一些限制,比如一个程序在30秒内不能超过100MB,一个程序在20秒内不能使用90%或更多的CPU。你可以使用RLIMIT_CPU,RLIMIT_DATA和朋友,但他们都没有任何持续时间或窗口的概念。如果这些为你工作,他们是,伟大的;如果没有,您能更详细地解释您试图解决的问题吗?否。您需要围绕代码运行某种类型的管理程序,或者作为一个fork/exec程序,或者作为一个截获libc/system调用的注入

我想为execv生成的程序可以使用一定数量的内存和一定数量的CPU时间设置限制。例如,我想设置一些限制,比如一个程序在30秒内不能超过100MB,一个程序在20秒内不能使用90%或更多的CPU。

你可以使用
RLIMIT_CPU
RLIMIT_DATA
和朋友,但他们都没有任何持续时间或窗口的概念。如果这些为你工作,他们是,伟大的;如果没有,您能更详细地解释您试图解决的问题吗?

否。您需要围绕代码运行某种类型的管理程序,或者作为一个fork/exec程序,或者作为一个截获libc/system调用的注入库。

我希望能够设置限制,例如
MAXMEM=100M:30
,这意味着一个程序只能超过100米运行30秒,而
MAXCPU=90:20
意味着当使用90%或更多的CPU时,一个程序最多可以运行20秒。在这种情况下,您需要自己实现它。我仍然很好奇你在试图解决什么问题。我正在尝试制作一个shell,它可以对程序进行如上所述的限制。然后你需要为它编写一些代码,或者在shell的应用程序代码中,或者如果你愿意的话,在系统自己的rlimit东西旁边(我不熟悉它的实现,但我认为有可能添加新的限制)。既然您的shell将执行其他程序,那么您最好从在procfs中采样数据开始(
/proc//…
),正如Ignacio在回答中提到的。你的意思是像一个不断检查子进程状态的函数一样?这似乎浪费了CPU资源。有没有比让它不断检查更好的方法?不要一直检查本身。每次调用时检查,但不要超过,比如说,每5秒检查一次。