C言語システムコール-getrlimit
getrlimitシステムコール
概要
getrlimitはプロセスが使用するシステムリソースの上限を取得します。
リソースにはCPU時間やファイルサイズなどがあり、それらに上限を設定できます。
リソースのリミット値はrlimit構造体を介して取得します。
リミットには「ソフトリミット」と「ハードリミット」があります。
ソフトリミットとは、警告付きで一時的に超えることのできる目安の限界値です。
ハードリミットは厳密な限界値であり、超えた場合にはエラーとなります。
例えばCPU時間のリミット例を挙げます。
プロセスの消費したCPU時間がソフトリミットを超過すると、プロセスに「SIGXCPU」シグナルが送信されます。
プロセスの消費したCPU時間がハードリミットを超過すると、プロセスに「SIGKILL」シグナルが送信され、プロセスが強制終了されます。
ソフトリミットはハードリミット以下の値に設定します。
ハードリミットの変更にはroot権限が必要になります。
リミットを無制限(RLIM_INFINITY)にすることは可能です。
サンプルプログラム
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
int
check_rlimit(int resource, char *resname)
{
struct rlimit rl;
int rc = 0;
printf("[%s]\n", resname);
rc = getrlimit(resource, &rl);
if(rc < 0){
printf("Error: getrlimit(%d) %s\n", errno, strerror(errno));
return(-1);
}
if(rl.rlim_cur == RLIM_INFINITY){
printf("soft limit = unlimited\n");
}else{
printf("soft limit = %lld\n", (long long)rl.rlim_cur);
}
if(rl.rlim_max == RLIM_INFINITY){
printf("hard limit = unlimited\n");
}else{
printf("hard limit = %lld\n", (long long)rl.rlim_max);
}
return(0);
}
int
main(void)
{
int rc = 0;
rc = check_rlimit(RLIMIT_CPU, "cpu time");
if(rc != 0) return(-1);
rc = check_rlimit(RLIMIT_FSIZE, "file size");
if(rc != 0) return(-1);
rc = check_rlimit(RLIMIT_DATA, "data segment size");
if(rc != 0) return(-1);
rc = check_rlimit(RLIMIT_STACK, "stack size");
if(rc != 0) return(-1);
rc = check_rlimit(RLIMIT_CORE, "core file size");
if(rc != 0) return(-1);
rc = check_rlimit(RLIMIT_NOFILE, "open file");
if(rc != 0) return(-1);
return(0);
}
関連ページ
- C言語
- C言語システムコール
- C言語システムコール-chdir
- C言語システムコール-chroot
- C言語システムコール-fork
- C言語システムコール-execve
- C言語システムコール-wait
- C言語システムコール-getpid
- C言語システムコール-getpriority / C言語システムコール-setpriority
- C言語システムコール-getpgid / C言語システムコール-setpgid
- C言語システムコール-getuid / C言語システムコール-setuid
- C言語システムコール-getsid / C言語システムコール-setsid
- C言語システムコール-getgroups / C言語システムコール-setgroups
- C言語システムコール-getrusage
- C言語システムコール-getrlimit / C言語システムコール-setrlimit
- C言語システムコール-nanosleep
- C言語システムコール-kill
- C言語システムコール-sigaction
- C言語システムコール-sigsuspend
- C言語システムコール-signal
- C言語システムコール-getitimer
- C言語システムコール