0
点赞
收藏
分享

微信扫一扫

分享一个爬虫数据挖掘 农村产权交易数据可视化平台 数据分析大数据 Java、python双版(源码、调试、LW、开题、PPT)

一枚路过的程序猿 2024-09-21 阅读 7

一、前言

一个进程在运行时,会用到各种资源,比如cpu的使用时间、内存空间、文件等等。那么,一个进程能够占用多少资源呢?cpu使用的时间有多长?进程空间有多大?能够创建多少个文件?这个就是本文需要讨论的内容。
unix系统提供了两个函数来查询和修改进程的资源限制:getrlimit、setrlimit
本文将围绕这两个函数展开讨论。

二、getrlimit

getrlimit用于查看一个进程的资源限制,其函数原型如下:

rlimit数据结构的定义如下:

rlim_t是一个无符号整型。
linux中支持查询的资源限制如下:

参考代码如下:

/**************************************************************************************
                     > File Name: rlimit.c
                                         > Author: Conbiao
                                         > Create Time: 2024.9.18 Wednesday
 *************************************************************************************/

/**************************************************************************************
 *                                        HEADER
 *************************************************************************************/
#include <stdio.h>
#include <sys/resource.h>

/**************************************************************************************
 *                                        MACRO
 *************************************************************************************/


/**************************************************************************************
 *                                 FUNCTION DESCRIPTION
 *************************************************************************************/ 

/**************************************************************************************
 *                                        MAIN
 *************************************************************************************/
int main(int argc, char *argv[])
{
        int ret = 0;
        struct rlimit rl;
        
        if(!getrlimit(RLIMIT_NICE,&rl))
        {
                printf("%s: current nice = %lu, the max nice = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);
        }
        else
        {
                printf("%s: get nice failed!\n",__func__);
                return -1;
        }

        if(!getrlimit(RLIMIT_CPU,&rl))
        {
                printf("%s: current cpu = %lu, the max cpu = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);
        }
        else
        {
                printf("%s: get cpu failed!\n",__func__);
                return -1;
        }

        if(!getrlimit(RLIMIT_NPROC,&rl))
    {
        printf("%s: current nproc = %lu, the max nproc = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);
    }
    else
    {
        printf("%s: get nproc failed!\n",__func__);
        return -1;
    }


        return ret;
}

运行结果如下图所示:
[图片]

(2-1)
ps:资源限制影响到调用进程并由子进程集成。也就是说如果一个进程修改了其资源限制,那么其子进程也会集成这些修改后的限制。

三、setrlimit

setrlimit用于设置进程的资源限制。其函数原型如下:

参考代码如下:

**/**************************************************************************************
                     > File Name: rlimit.c
                                         > Author: Conbiao
                                         > Create Time: 2024.9.18 Wednesday
 *************************************************************************************/
/**************************************************************************************
 *                                        HEADER
 *************************************************************************************/
#include <stdio.h>
#include <sys/resource.h>
/**************************************************************************************
 *                                        MACRO
 *************************************************************************************/
/**************************************************************************************
 *                                 FUNCTION DESCRIPTION
 *************************************************************************************/
/**************************************************************************************
 *                                        MAIN
 *************************************************************************************/
int main(int argc, char *argv[])
{
    int ret = 0;
    struct rlimit rl;
    if(!getrlimit(RLIMIT_NICE,&rl))
    {
        printf("%s: current nice = %lu, the max nice = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);
    }
    else
    {
        printf("%s: get nice failed!\n",__func__);
        return -1;
    }
    if(!getrlimit(RLIMIT_CPU,&rl))
    {
        printf("%s: current cpu = %lu, the max cpu = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);
    }
    else
    {
        printf("%s: get cpu failed!\n",__func__);
        return -1;
    }
    if(!getrlimit(RLIMIT_NPROC,&rl))
    {
        printf("%s: current nproc = %lu, the max nproc = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);
    }
    else
    {
        printf("%s: get nproc failed!\n",__func__);
        return -1;
    }
    if(!getrlimit(RLIMIT_NOFILE,&rl))
    {
        printf("%s: current nofile = %lu, the max nofile = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);
    }
    else
    {
        printf("%s: get nofile failed!\n",__func__);
        return -1;
    }
    rl.rlim_cur = 2048;
    //rl.rlim_max = 1048577;
    if(!setrlimit(RLIMIT_NOFILE,&rl))
    {
        printf("%s: set rlimit success!\n",__func__);
        if(!getrlimit(RLIMIT_NOFILE,&rl))
        {
            printf("%s: new current nofile = %lu, the max nofile = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);
        }
        else
        {
            printf("%s: get nofile failed!\n",__func__);
            return -1;
        }
    }
    else
    {
        return -1;
    }
    return ret;
}**

运行结果如下所示:
[图片]

(3-1)
Ps: 一般只能修改软限制,硬限制需要root权限才能修改硬限制。

举报

相关推荐

0 条评论