c - c中的setrlimit是否可以达到毫秒精度

标签 c setrlimit

正如标题所暗示的那样,我需要知道是否有某种方法可以通过 setrlimit RLIMIT_CPU 获得小于秒级的精度?

struct rlimit cpulimit;
cpulimit.rlim_cur = 5; // 5 seconds SIGXCPU
cpulimit.rlim_max = 5; // 5 seconds SIGKILL

(我知道在一个典型的系统上,一个程序一次可能需要大约 10 毫秒)我什至不需要它是毫秒级的精度。 100 毫秒就可以了。

所以我很好奇会不会是这样的:

struct rlimit cpulimit;
cpulimit.rlim_cur = 3500; // 3.5 seconds SIGXCPU
cpulimit.rlim_max = 4500; // 4.5 seconds SIGKILL

我没有看到解释我需要它的原因以及我如何使用它的相关性。 如果需要,我会编辑问题和信息。

提前致谢

最佳答案

POSIX 只允许 setrlimit 中的秒精度。可能有您可以使用的特定于操作的扩展,但我不知道有任何操作系统可以使用它。 RLIMIT_CPU 是大学多用户系统时代遗留下来的东西,您需要限制学生在尝试学习编程时可能造成的损害。因此,它很少在现代系统中得到完善、调试和改进。

根据经验,我知道考虑 CPU 时间和 RLIMIT_CPU 的执行在不同的系统上受到可怕的限制,您甚至可能在两次之后都没有为进程获得 SIGXCPU如果您使用较短的超时时间,则可以使用尽可能多的时间。因此,无论您要解决什么问题,您都可能需要重新考虑您想要完成的事情并以不同的方式来完成。

如果您真的需要以毫秒精度杀死一个花费过多 CPU 时间的进程,您可以做的最好的事情是让一个监督进程经常用 getrusage(RUSAGE_CHILDREN) 探测子进程够了就开枪。但请注意,您从 getrusage 获得的计数器通常是概率性的(通过时钟中断采样),并且报告的 CPU 使用率可能与实际 CPU 使用率相差甚远,尤其是在运行程序的早期阶段进程(这些计数器可能与用于 RLIMIT_CPU 的计数器相同,也可能不同)。

关于c - c中的setrlimit是否可以达到毫秒精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24858738/

相关文章:

python - 在 Windows 上构建 64 位 C Python 扩展

python - 如何使用 `setrlimit` 来限制内存使用? RLIMIT_AS 杀得太快; RLIMIT_DATA, RLIMIT_RSS, RLIMIT_STACK 根本不杀死

python - Windows 上的资源限制?

c - 这是编辑 RLIMIT_NPROC 值的更好方法

c - C代码中令人惊讶的段错误

c - 释放指向指针的指针

c - 解释这个函数的作用

c - 使用 fscanf 从文件中读取格式化字符串

c++ - 查找当前打开的文件句柄数(不是 lsof)

c++ - setrlimit() 不影响生成的 std::threads