日志:
系統運行時或者程序運行時會產生很多信息,通常將其保存于/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使用的系統時間 //一個同樣程序的系統時間時固定的
新聞熱點
疑難解答