/* * Simple utility testing the new RLIMIT_RT_CPU feature. */ #include #include #include #include #include #include #include #define RLIMIT_RT_CPU 13 int main (int argc, char **argv) { int ret; struct rlimit rlim, rlim_old; unsigned long curr, max; if (argc != 4) { usage: printf("usage: execrtlim \n"); exit(-1); } curr = atol(argv[1]); if (curr > 100) goto usage; max = atol(argv[2]); if (max > 100) goto usage; ret = getrlimit(RLIMIT_RT_CPU, &rlim); if (ret) switch (errno) { case EPERM: fprintf(stderr, "execrtlim: no permission to increase rlimit.\n"); exit(-1); case EINVAL: fprintf(stderr, "execrtlim: kernel does not support RLIMIT_RT_CPU.\n"); exit(-1); default: fprintf(stderr, "execrtlim: unknown error.\n"); exit(-1); case 0: ; } rlim_old = rlim; rlim.rlim_cur = curr; rlim.rlim_max = max; ret = setrlimit(RLIMIT_RT_CPU, &rlim); if (ret) switch (errno) { case EPERM: fprintf(stderr, "execrtlim: no permission to increase rlimit.\n"); exit(-1); default: fprintf(stderr, "execrtlim: unknown error.\n"); exit(-1); case 0: ; } printf("execrtlim: changed RLIMIT_RT_CPU from %ld/%ld to %ld/%ld.\n", rlim_old.rlim_cur, rlim_old.rlim_max, curr, max); system(argv[3]); return 0; }