C言語システムコール-setrlimit
setrlimitシステムコール
概要
setrlimitはプロセスが使用するシステムリソースの上限を設定します。
リソースには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)
{
struct rlimit rl;
int rc = 0;
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;
struct rlimit rl;
rl.rlim_cur = 1;
rl.rlim_max = 2;
rc = setrlimit(RLIMIT_CPU, &rl);
if(rc < 0){
printf("Error: setrlimit(%d) %s\n", errno, strerror(errno));
return(-1);
}
rc = check_rlimit(RLIMIT_CPU);
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言語システムコール