Test Highlight
June 16, 2015 | 2 Minute Read
/* gcc -o prlimit prlimit.c */
#define _GNU_SOURCE
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/resource.h>
#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)
int
main(int argc, char *argv[])
{
struct rlimit old, new;
struct rlimit *newp;
pid_t pid;
if (!(argc == 2 || argc == 4)) {
fprintf(stderr, "Usage: %s <pid> [<new-soft-limit> "
"<new-hard-limit>]\n", argv[0]);
exit(EXIT_FAILURE);
}
pid = atoi(argv[1]); /* PID of target process */
newp = NULL;
if (argc == 4) {
new.rlim_cur = atoi(argv[2]);
new.rlim_max = atoi(argv[3]);
newp = &new;
} else {
new.rlim_cur = RLIM_INFINITY;
new.rlim_max = RLIM_INFINITY;
newp = &new;
}
if (prlimit(pid, RLIMIT_CORE, newp, &old) == -1)
errExit("prlimit-1");
printf("Previous core file size limits: soft=%lld; hard=%lld\n",
(long long) old.rlim_cur, (long long) old.rlim_max);
/* Retrieve and display new CPU time limit */
if (prlimit(pid, RLIMIT_CORE, NULL, &old) == -1)
errExit("prlimit-2");
printf("New core file size limits: soft=%lld; hard=%lld\n",
(long long) old.rlim_cur, (long long) old.rlim_max);
if ( old.rlim_cur != new.rlim_cur ||
old.rlim_max != new.rlim_max) {
fprintf(stderr , "failed to change core file size of process %d .", pid);
exit(EXIT_FAILURE);
}
exit(0);
}