서버에서 데몬(백그라운드 프로세스, 서비스)로 동작하면서 시스템의 변화를 확인하기 위해서 사용했던 내용으로 리눅스에서 c로 간단하게 구현할 수 있는 방법을 소개한다.
--- 시스템 관리 함수 관련 글타래 -------------------------------
1. 시스템 메모리 사용량 확인 : meminfo() 또는 sysinfo()
>> 2. 프로세스의 리소스 정보 확인 : getrusage()
3. 파일시스템(저장소) 정보 확인 : fstatvfs()
--------------------------------------------------------------------
embeddedclub.net에서 조회수가 많이있는것으로 보아 언젠가는 독자께 도움이 될수 있을 거라 판단하여 게시물을 이동하였다.
2. getrusage
현재 프로세스에서 사용하는 리소스 또는 종료되어 대기한 child프로세스가 사용하는 리소스를 확인한다.
2.1. sysnopsis
1) 함수원형
#include <sys/time.h>
#include <sys/resource.h>
int getrusage(int who, struct rusage *usage);
2) 구조체
struct rusage {
struct timeval ru_utime;
struct timeval ru_stime;
long ru_maxrss;
long ru_ixrss;
long ru_idrss;
long ru_isrss;
long ru_minflt;
long ru_majflt;
long ru_nswap;
long ru_inblock;
long ru_oublock;
long ru_msgsnd;
long ru_msgrcv;
long ru_nsignals;
long ru_nvcsw;
long ru_nivcsw;
};
2.2. Description
1) 구조체 멤버정보
sysinfo() 는 전체적인 시스템 통계 정보를 가져오기 위해서 사용한다. 가져온 정보는 struct sysinfo 에 채워진다.
struct sysinfo 는 다음과 같은 멤버변수를 가진다.
struct timeval ru_utime : 사용자가 사용한 시간
struct timeval ru_stime : 사용된 시스템 시간
long ru_maxrss : 최대 상주 세트 크기
long ru_ixrss : 통합 공유 메모리 크기
long ru_idrss : 비공유 데이터의 정수 크기
long ru_isrss : 통합 비공유 스택 크기
long ru_minflt : 페이지 회수
long ru_majflt : 페이지 폴트
long ru_nswap : 스왑
long ru_inblock : 입력 기능 차단
long ru_oublock : 출력 기능 차단
long ru_msgsnd : 보낸 메시지
long ru_msgrcv : 받은 메시지
long ru_nsignals : 수신된 신호
long ru_nvcsw : 자발적인 컨텍스트 전환
long ru_nivcsw : 비자발적 컨텍스트 전환
2) 반환값
성공시 0, 실패하면 -1 (이외 여러 오류가 발생할 수 있으며, 일반적으로 EFAULT(errno 코드)가 발생.
아쉽게도 샘플이 기존 게시물에 포함되어있지 않았다. 필자의 기억으로는 프로세스 메모리 사용량을 확인한 경험이 있다고 기억이 됨에 따라 크게 무리 없이 사용하였던것으로 기억한다. 이러한 함수도 있다 정도만 기억하고 있다가 필요시 찾아서 활용하는 정도로만 기록해둔다.
도움이 되었길 바란다.
최근댓글