getrlimit(2) System Calls Manual getrlimit(2) getrlimit, setrlimit, prlimit - / (libc -lc) #include int getrlimit(int resource, struct rlimit *rlim); int setrlimit(int resource, const struct rlimit *rlim); int prlimit(pid_t pid, int resource, const struct rlimit *_Nullable new_limit, struct rlimit *_Nullable old_limit); struct rlimit { rlim_t rlim_cur; /* */ rlim_t rlim_max; /* ( rlim_cur) */ }; typedef /* ... */ rlim_t; /* Unsigned integer type */ glibc ( feature_test_macros(7)): prlimit(): _GNU_SOURCE getrlimit() setrlimit() . rlimit. . : 0 ( ). ( : CAP_SYS_RESOURCE ) . RLIM_INFINITY ( getrlimit() setrlimit()). resource : RLIMIT_AS ( ). . brk(2) mmap(2) mremap(2) ENOMEM . ( SIGSEGV sigaltstack(2)). long long 32 2 . RLIMIT_CORE core ( core(5)) . 0 . . RLIMIT_CPU . SIGXCPU . . . SIGXCPU SIGKILL. ( . . SIGXCPU.) RLIMIT_DATA ( ). . brk(2) sbrk(2) ( 4.7) mmap(2) ENOMEM . RLIMIT_FSIZE . SIGXFSZ. ( write(2) truncate(2)) EFBIG. RLIMIT_LOCKS ( 2.4.0 2.4.24) flock(2) fcntl(2) . RLIMIT_MEMLOCK . . mlock(2) mlockall(2) mmap(2) MAP_LOCKED. 2.6.9 shmctl(2) SHM_LOCK ( shmget(2)) . shmctl(2) SHM_LOCK mlock(2) mlockall(2) mmap(2) MAP_LOCKED . 2.6.9 . 2.6.9 . RLIMIT_MSGQUEUE ( 2.6.8) POSIX . mq_open(3). ( ) : 3.5: bytes = attr.mq_maxmsg * sizeof(struct msg_msg) + MIN(attr.mq_maxmsg, MQ_PRIO_MAX) * sizeof(struct posix_msg_tree_node)+ /* */ attr.mq_maxmsg * attr.mq_msgsize; /* */ 3.4 : = attr.mq_maxmsg * sizeof(struct msg_msg *) + /* */ attr.mq_maxmsg * attr.mq_msgsize; /* */ attr mq_attr mq_open(3) msg_msg posix_msg_tree_node . "" ( ). RLIMIT_NICE ( 2.6.12 ) nice setpriority(2) nice(2). nice 20 - rlim_cur. 1 ( nice 19) 40 ( nice -20). . RLIM_INFINITY -1. nice sched(7). RLIMIT_NOFILE . (open(2) pipe(2) dup(2) ) EMFILE. ( RLIMIT_OFILE BSD.) 4.5 ( CAP_SYS_RESOURCE) " " UNIX. sendmsg(2). unix(7). RLIMIT_NPROC ( ) . fork(2) EAGAIN. RLIMIT_NPROC CAP_SYS_ADMIN CAP_SYS_RESOURCE 0. RLIMIT_RSS () ( RAM). 2.4.x x < 30 madvise(2) MADV_WILLNEED. RLIMIT_RTPRIO ( 2.6.12 ) sched_setscheduler(2) sched_setparam(2). sched(7) RLIMIT_RTTIME ( 2.6.25) () . . sched_yield(2). SIGXCPU . SIGXCPU SIGKILL . . sched(7) RLIMIT_SIGPENDING ( 2.6.8) . . sigqueue(3); kill(2) . RLIMIT_STACK . SIGSEGV. (sigaltstack(2)). 2.6.23 execve(2). prlimit() prlimit() setrlimit() getrlimit(). . resource setrlimit() getrlimit(). new_limit NULL rlimit resource. old_limit NULL prlimit() resource rlimit old_limit. pid . pid 0 . CAP_SYS_RESOURCE . 0. -1 errno . EFAULT . EINVAL resource setrlimit() prlimit(): rlim->rlim_cur rlim->rlim_max. EPERM CAP_SYS_RESOURCE . EPERM RLIMIT_NOFILE /proc/sys/fs/nr_open ( proc(5)) EPERM (prlimit()) pid. ESRCH pid. attributes(7). +------------+------------------------------------+--------------------+ || | | +------------+------------------------------------+--------------------+ |getrlimit(),| | MT-Safe | |setrlimit(),| | | |prlimit() | | | +------------+------------------------------------+--------------------+ getrlimit() setrlimit() POSIX.1-2024. prlimit() . RLIMIT_MEMLOCK RLIMIT_NPROC BSD POSIX.1 BSD . RLIMIT_RSS BSD POSIX.1 . RLIMIT_MSGQUEUE RLIMIT_NICE RLIMIT_RTPRIO RLIMIT_RTTIME RLIMIT_SIGPENDING . getrlimit() setrlimit() 4.3BSD SVr4 SUSv1 POSIX.1-2001 XSI POSIX.1-2024. prlimit() 2.6.36 glibc 2.13. fork(2) . execve(2). . ( ). ulimit (limit csh(1)). . 2.6.24 /proc/pid/limits proc(5). vlimit() setrlimit(). glibc vlimit(). setrlimit(). ABI C glibc 2.13 getrlimit() setrlimit() glibc prlimit() BUGS. glibc prlimit() prlimit64(). SIGXCPU SIGKILL RLIMIT_CPU ( ) . 2.6.8. 2.6.x 2.6.17 RLIMIT_CPU 0 " " ( RLIM_INFINITY). 2.6.17 0 . RLIMIT_RTPRIO 2.6.12 2.6.13. 2.6.12 getpriority(2) RLIMIT_NICE. nice 19 - rlim_cur. 2.6.13. 2.6.12 RLIMIT_CPU SIGXCPU . . RLIMIT_CPU . RLIMIT_RTTIME . 2.4.22 EINVAL setrlimit() rlim->rlim_cur rlim->rlim_max. RLIMIT_CPU . "" 32 getrlimit() setrlimit() glibc rlim_t 64 32 . rlim_t getrlimit() setrlimit() unsigned long (32 ). 32 unsigned long. 32 . RLIMIT_FSIZE : -- off_t 64 ( _FILE_OFFSET_BITS=64). unsigned long 32 setrlimit() glibc RLIM_INFINITY. . glibc 2.13 glibc getrlimit() setrlimit() setrlimit() getrlimit() prlimit(). prlimit(). #define _GNU_SOURCE #define _FILE_OFFSET_BITS 64 #include #include #include #include #include #include int main(int argc, char *argv[]) { pid_t pid; struct rlimit old, new; struct rlimit *newp; if (!(argc == 2 || argc == 4)) { fprintf(stderr, "Usage: %s [ " "]\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; } /* Set CPU time limit of target process; retrieve and display previous limit */ if (prlimit(pid, RLIMIT_CPU, newp, &old) == -1) err(EXIT_FAILURE, "prlimit-1"); printf("Previous limits: soft=%jd; hard=%jd\n", (intmax_t) old.rlim_cur, (intmax_t) old.rlim_max); /* Retrieve and display new CPU time limit */ if (prlimit(pid, RLIMIT_CPU, NULL, &old) == -1) err(EXIT_FAILURE, "prlimit-2"); printf("New limits: soft=%jd; hard=%jd\n", (intmax_t) old.rlim_cur, (intmax_t) old.rlim_max); exit(EXIT_SUCCESS); } prlimit(1), dup(2), fcntl(2), fork(2), getrusage(2), mlock(2), mmap(2), open(2), quotactl(2), sbrk(2), shmctl(2), malloc(3), sigqueue(3), ulimit(3), core(5), capabilities(7), cgroups(7), credentials(7), signal(7) 3 . . : . 6.18 8 2026 getrlimit(2)