首页 > 系统 > Linux > 正文

Linux环境-日志、资源和限制

2024-06-28 16:03:16
字体:
来源:转载
供稿:网友

日志:

系统运行时或者程序运行时会产生很多信息,通常将其保存于/var/log或者/usr/adm

UNIX规范提供了一个产生信息的接口

#include <syslog.h>

void syslog(int PRiority, const char *message, arguments...);

priority 是一个严重级别与一个设施值的按位或,根据不同的系统配置,不同的严重级别系统会做出不同的动作

严重级别:

LOG_EMERG 紧急情况

LOG_ALERT 高优先级故障

LOG_CRIT 严重错误

LOG_ERR 错误

LOG_WARNING 警告

LOG_NOTICE 需要注意的特殊情况

LOG_INFO 一般信息

LOG_DEBUG 调试信息

设施值:

LOG_USER,LOG_LOCAL0~LOG_LOCAL7

message、argument : 与printf的用法类似

特别的%m可以插入与错误变量errno当前值对应的出错消息字符串

另有一些能够改变日志记录行为的函数

void closelog(void);

void openlog(const char *ident, int logopt, int facility);

int setlogmask(int maskpri);

ident: 设置该字符串,将会将该字符串加在每一条日志信息前

facility: 记录一个将被用于后续syslog调用的默认设施值

logopt: 对后续syslog调用的行为进行配置,它是0个或者多个下列参数的按位或

LOG_PID 在日志信息中包含进程标识符

LOG_CONS 如果信息不能被记录到日志文件中,就把他们发送到控制台

LOG_ODELAY 在第一次调用syslog时才打开日志设施(惰性开启)

LOG_NDELAY 立即打开日志设施,而不是等到第一次记录日志时

openlog会分配并打开一个文件描述符,通过closelog可以关闭它

maskpri: 通过设置它来决定关注哪些等级的log 

               例:setlogmask(LOG_UPTO(LOG_NOTICE)); 只有严重程度在LOG_NOTICE之上的log才会被记录

#include <sys/types.h>

#include <unistd.h>

pid_t getpid(void); //获得进程PID

pid_t getppid(void);//获得父进程PID

限制:

在linux系统上运行的程序会受到资源的限制,有来自硬件方面的物理限制,系统策略上的限制或具体实现的限制

在limits.h头文件中便定义了许多代表操作系统方面的限制的显式常量

例如:

NAME_MAX 文件名中的最大字符数

CHAR_BIT char类型值的位数

CHAR_MAX char类型的最大值

INT_MAX int类型的最大值

资源:

在头文件sys/resource.h中提供了资源操作方面的定义,其中包括对程序长度、执行优先级和文件资源等方面限制进行查询和设置的函数

#include <sys/resource.h>

//获得与优先级参数

int getpriority(int which, id_t who);//失败返回-1,由于-1也是一个有效优先级所以需要检查errno且在之前需要将errno设置为0

int setpriority(int which, id_t who, int priority);//失败返回-1,成功 0

which参数

PRIO_PROCESS who参数时进程标识符

PRIO_PGRP who参数是进程组

PRIO_USER who参数时用户标识符

priority参数: -20 ~ 20 负的优先级将会占用更多的CPU时间,普通用户只能降低程序的优先级,而不能升高

//获得与设置资源限制

int getrlimit(int resource, struct rlimit *r_limit);

int setrlimit(int resource, const struct rlimit *r_limit);

resource参数:

RLIMIT_CORE 内核转储(core dump)文件的大小限制(字节为单位)

RLIMIT_CPU CPU时间限制(秒为单位)

RLIMIT_DATA 数据段限制(字节)

RLIMIT_FSIZE 文件大小限制(字节)

RLIMIT_NOFILE 可以打开的文件数限制

RLIMIT_STACK 栈大小限制(字节)

RLIMIT_AS 地址空间(栈和数据)限制(字节)

r_limit成员:

rlimit_t rlim_cur 当前的软限制

rlimit_t rlim_max 硬限制

//确定当前程序已耗费了多少CPU时间

int getrusage(int who, struct rusage *r_usage);

who参数:

RUSAGE_SELF 仅返回当前程序的使用信息

RUSAGE_CHILDREN 还包括子进程的使用信息

r_usage结构体:

struct timeval ru_utime使用的用户时间 //用户时间和优先级有关

struct timeval ru_utime使用的系统时间 //一个同样程序的系统时间时固定的


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表