一、进程与信号的资源限制

进程资源函数

#include <sys/resource.h>
获取用户资源
int getrlimit(int resource,struct rlimit *rlptr);

设置用户资源
int setrlimit(int resource,struct rlimit *rlptr);

内核资源结构体
struct rlimit
{
      rlimit_t rlim_cur;/*soft limit:current limit**/ 软件资源
      rlimit_t rlim_max;/*hard limit;maximum value for rlim_cur**/ 硬件资源
}
resource 取值
RLIMIT_AS       进程可用存储区大小
RLIMIT_CORE   core文件最大字节
RLIMIT_CPU     CPU时间最大值
RLIMIT_DATA   数据段最大长度
RLIMIT_FSIZE  可创建文件的最大值
RLIMIT_LOCKS 文件锁的最大数
RLIMIT_MEMLOCK 使用mlock能否在存储器中锁定最长字节数
RLIMIT_NOFILE   能打开的最大文件数
RLIMIT_NPROC 每个用户id可拥有的最大进程数
RLIMIT_RSS     最大驻存集的字节长度
RLIMIT_STACK 栈的最大长度

获取系统资源参数

#include <sys/resource.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define RLIMIT(name)        get_limit(#name,name)

void get_limit(char *name,int resource)
{
    struct rlimit limit;
    if(getrlimit(resource,&limit)<0)
    {
        printf("get limit resource error");
        return ;
    }
    printf("%-15s",name);
    if(limit.rlim_cur==RLIM_INFINITY)
    {
        printf(" infinity");
    }
    else
    {
        printf("%10ld",limit.rlim_cur);
    }
    if(limit.rlim_max==RLIM_INFINITY)
    {
        printf(" infinity\n");
    }
    else
    {
        printf("%10ld\n",limit.rlim_max);
    }
    return;
}

int main()
{
    RLIMIT(RLIMIT_AS);
    RLIMIT(RLIMIT_CORE);
    RLIMIT(RLIMIT_CPU);
    RLIMIT(RLIMIT_DATA);
    RLIMIT(RLIMIT_FSIZE);
    RLIMIT(RLIMIT_LOCKS);
    RLIMIT(RLIMIT_MEMLOCK);
    RLIMIT(RLIMIT_NOFILE);
    RLIMIT(RLIMIT_NPROC);
    RLIMIT(RLIMIT_RSS);
    RLIMIT(RLIMIT_STACK);
    return 0;
}

结果

RLIMIT_AS       infinity infinity
RLIMIT_CORE             0 infinity
RLIMIT_CPU      infinity infinity
RLIMIT_DATA     infinity infinity
RLIMIT_FSIZE    infinity infinity
RLIMIT_LOCKS    infinity infinity
RLIMIT_MEMLOCK      65536     65536
RLIMIT_NOFILE        1024     65536
RLIMIT_NPROC         3749      3749
RLIMIT_RSS      infinity infinity
RLIMIT_STACK      8388608 infinity

linux系统资源限制配置

/etc/security/limits.conf

文件打开数限制
系统已存在,0,文件打开,1,文件输出,2,文件错误
时间: 2024-10-06 15:35:33

一、进程与信号的资源限制的相关文章

第9章 进程和信号(一)

本文目录: 9.1 进程的简单说明 9.11 进程和程序的区别 9.12 多任务和cpu时间片 9.13 父子进程及创建进程的方式 9.14 进程的状态 9.15 举例分析进程状态转换过程 9.16 进程结构和子shell 9.2 job任务 9.3 终端和进程的关系 9.4 信号 9.41 需知道的信号 9.42 SIGHUP 9.43 僵尸进程和SIGCHLD 9.44 手动发送信号(kill命令) 9.45 pkill和killall 9.5 fuser和lsof 9.1 进程简单说明 进

进程-IPC 信号和信号量 (二)

详细见:  https://github.com/ZhangzheBJUT/linux/blob/master/IPC(%E4%BA%8C).md 三 信号 3.1. 信号简介 信号是进程之间互相传递消息的一种方法,信号全称为软中断信号,也可称为软中断,它是实现IPC的方法之一. 信号是UNIX和Linux系统响应某些条件而产生的一个事件.进程之间可以互相通过系统调用kill发送软中断信号.内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件. 注:信号只是简单用来通知某进程发生了什么

Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> 参考:C和指针学习 说明:本文非常的长,也是为了便于查找和比较,所以放在一起了 Linux 传统的进程间通信有很多,如各类管道.消息队列.内存共享.信号量等等.但它们都无法介于内核态与用户态使用,原因如表 通信方法 无法介于内核态与用户态的原因 管道(不包括命名管道) 局限于父子进程间的通信. 消息队列 在

Linux进程管理(二)进程的调度与资源限制

1 进程调度就绪进程最重要的特征是该进程是非阻塞的.进行用户交互.大量读写文件.响应I/O和网络事件的进程会花费大量时间来等待资源可用,在相当长的时间内无法转为就绪状态(长是相对于指令运行时间而言),因此就绪进程首先应该是非阻塞的.一个就绪进程还必须至少有部分"时间片"(调度器分配给进程的运行时间).内核用一个就绪队列维护所有的就绪进程,一旦某进程耗光它的时间片,内核就将其移出队列,直到所有就绪进程都耗光时间片才考虑将其放回队列.多任务操作系统分为两大类:协同式和抢占式.Linux实现

一、进程与信号之信号的概念

信号:进程与进程之间通讯机制 信号是软件中断 信号是异步事件 信号来源:内核产生,常用信号kill(),raise(),alarm(),settimer()等 kill -l 查看linux所有 信号共64个 1-31 非实时信号发送信号可能回丢失,不支持信号排队 32-64实时信号 进程处理信号: 忽略信号 SIGKILL和SIGSTOP永远不能被忽略 忽略硬件异常 进程启动时SIGUSER1和SIGUSER2两个信号被忽略 执行默认操作 每个信号都有默认动作,大部分信号动作是终止信号 捕获信

2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,

 1信号产生原因 2.进程处理信号行为 manpage里信号3中处理方式: SIG_IGN SIG_DFL                                            默认Term动作 a signal handling function 进程处理信号 A默认处理动作 term   中断 core    core(调试的时候产生) gcc –g file.c ulimit –c 1024 gdb a.out core ign      忽略 stop     停止

Android -- Init进程对信号的处理流程

Android -- Init进程对信号的处理流程 在Android中,当一个进程退出(exit())时,会向它的父进程发送一个SIGCHLD信号.父进程收到该信号后,会释放分配给该子进程的系统资源:并且父进程需要调用wait()或waitpid()等待子进程结束.如果父进程没有做这种处理,且父进程初始化时也没有调用signal(SIGCHLD, SIG_IGN)来显示忽略对SIGCHLD的处理,这时子进程将一直保持当前的退出状态,不会完全退出.这样的子进程不能被调度,所做的只是在进程列表中占据

进程和信号

前言 没深入研究进程和信号,只是本人一个粗虐的理解. 什么是进程? 1.当程序未被解析器运行时,只是一个静态的文件或数据流. 2.程序被解析器运行时,就产生了进程,进程代表当前程序运行时的一个状态. 父子进程 1.进程好比现实生活中的人,也有父子关系. 2.子进程会继承父进程,但子进程是独立的. 3.如果父进程死了,子进程会成孤儿,但儿子并不孤独,还有天地嘛. 4.有的人活着但死了,现实中叫僵尸,计算机里叫僵尸进程 信号 1.我们知道进程和进程是独立的,进程之间通信必须通过某方式进行交流.我们事

Linux 命令 - killall: 通过进程名向进程发送信号

命令格式 killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME... killall -l, --list killall -V, --version 命令参数 -e, --exact 对于长名字,要求精确匹配.如果一个命令名的长度超过 15 字符,则可能不会用完整的名字.这种情况下,killall 会杀死名字匹配前 15 个字符的进程.使用 -e 选项,则会要求进程名字完全匹配. -I, --ignore-case 匹配进程