Linux 进程资源限制函数 getrlimit setrlimit

tech2024-01-16  73

#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <sys/time.h> #include <sys/resource.h> void printf_linux_res(const char* name, int resource) { struct rlimit limit; if(getrlimit(resource, &limit) < 0) { perror("getrlimit"); } printf("%s:\n",name); if(limit.rlim_cur == RLIM_INFINITY) { printf("infinite "); }else { printf("%ld\t", limit.rlim_cur); } if(limit.rlim_max == RLIM_INFINITY) { printf("infinite "); }else{ printf("%ld\t", limit.rlim_max); } printf("\n"); } int main(int argc, const char* argv[]) { int ret = -1; // int getrlimit(int resource, struct rlimit *rlim); // int setrlimit(int resource, const struct rlimit *rlim); printf_linux_res("LIMIT_AS",RLIMIT_AS); printf_linux_res("RLIMIT_CORE",RLIMIT_CORE); printf_linux_res("RLIMIT_CPU",RLIMIT_CPU); printf_linux_res("RLIMIT_DATA",RLIMIT_DATA); printf_linux_res("RLIMIT_FSIZE",RLIMIT_FSIZE); printf_linux_res("RLIMIT_LOCKS",RLIMIT_LOCKS); printf_linux_res("RLIMIT_MEMLOCK",RLIMIT_MEMLOCK); printf_linux_res("RLIMIT_NOFILE",RLIMIT_NOFILE); printf_linux_res("RLIMIT_NPROC",RLIMIT_NPROC); printf_linux_res("RLIMIT_RSS",RLIMIT_RSS); printf_linux_res("RLIMIT_STACK",RLIMIT_STACK); return 0; } RLIMIT_AS:进程可用存储区的最大总长度(字节)。 RLIMIT_CORE:core文件的最大字节数,若取值为0则阻止创建core文件。 RLIMIT_CPU:CPU时间的最大值(秒),当超过此软限制时,向该进程发送SIGXCPU信号。 RLIMIT_DATA:数据段的最大字节长度。 RLIMIT_FSIZE:可以创建的文件的最大字节长度。当超过此软限制时,则向该进程发送SIGXFSZ信号。 RLIMIT_LOCKS:一个进程可持有的文件锁的最大数。 RLIMIT_MEMLOCK:一个进程使用mlock能够锁定在存储器中的最大字节长度。 RLIMIT_NOFILE:每个进程能打开最大文件数。更改此限制将影响到sysconf函数在参数_SC_OPEN_MAX返回的值。 RLIMIT_NPROC:每个实际用户ID可拥有的最大子进程数。更改此限制将影响到sysconf函数在参数_SC_CHILD_MAX返回的值。 RLIMIT_RSS:最大驻内存集的字节长度。(resident set size in bytes,RSS) RLIMIT_STACK:栈的最大字节长度。

测试结果

最新回复(0)