1 /* Bit values & structures for resource limits. Linux version. 2 Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004, 2005 3 Free Software Foundation, Inc. 4 This file is part of the GNU C Library. 5 6 The GNU C Library is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Lesser General Public 8 License as published by the Free Software Foundation; either 9 version 2.1 of the License, or (at your option) any later version. 10 11 The GNU C Library is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public 17 License along with the GNU C Library; if not, see 18 <http://www.gnu.org/licenses/>. */ 19 20 #ifndef _SYS_RESOURCE_H 21 # error "Never use <bits/resource.h> directly; include <sys/resource.h> instead." 22 #endif 23 24 #include <bits/types.h> 25 26 /* Transmute defines to enumerations. The macro re-definitions are 27 necessary because some programs want to test for operating system 28 features with #ifdef RUSAGE_SELF. In ISO C the reflexive 29 definition is a no-op. */ 30 31 /* Kinds of resource limit. */ 32 enum __rlimit_resource 33 { 34 /* Per-process CPU limit, in seconds. */ 35 RLIMIT_CPU = 0, 36 #define RLIMIT_CPU RLIMIT_CPU 37 38 /* Largest file that can be created, in bytes. */ 39 RLIMIT_FSIZE = 1, 40 #define RLIMIT_FSIZE RLIMIT_FSIZE 41 42 /* Maximum size of data segment, in bytes. */ 43 RLIMIT_DATA = 2, 44 #define RLIMIT_DATA RLIMIT_DATA 45 46 /* Maximum size of stack segment, in bytes. */ 47 RLIMIT_STACK = 3, 48 #define RLIMIT_STACK RLIMIT_STACK 49 50 /* Largest core file that can be created, in bytes. */ 51 RLIMIT_CORE = 4, 52 #define RLIMIT_CORE RLIMIT_CORE 53 54 /* Largest resident set size, in bytes. 55 This affects swapping; processes that are exceeding their 56 resident set size will be more likely to have physical memory 57 taken from them. */ 58 __RLIMIT_RSS = 5, 59 #define RLIMIT_RSS __RLIMIT_RSS 60 61 /* Number of open files. */ 62 RLIMIT_NOFILE = 7, 63 __RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */ 64 #define RLIMIT_NOFILE RLIMIT_NOFILE 65 #define RLIMIT_OFILE __RLIMIT_OFILE 66 67 /* Address space limit. */ 68 RLIMIT_AS = 9, 69 #define RLIMIT_AS RLIMIT_AS 70 71 /* Number of processes. */ 72 __RLIMIT_NPROC = 6, 73 #define RLIMIT_NPROC __RLIMIT_NPROC 74 75 /* Locked-in-memory address space. */ 76 __RLIMIT_MEMLOCK = 8, 77 #define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK 78 79 /* Maximum number of file locks. */ 80 __RLIMIT_LOCKS = 10, 81 #define RLIMIT_LOCKS __RLIMIT_LOCKS 82 83 /* Maximum number of pending signals. */ 84 __RLIMIT_SIGPENDING = 11, 85 #define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING 86 87 /* Maximum bytes in POSIX message queues. */ 88 __RLIMIT_MSGQUEUE = 12, 89 #define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE 90 91 /* Maximum nice priority allowed to raise to. 92 Nice levels 19 .. -20 correspond to 0 .. 39 93 values of this resource limit. */ 94 __RLIMIT_NICE = 13, 95 #define RLIMIT_NICE __RLIMIT_NICE 96 97 /* Maximum realtime priority allowed for non-priviledged 98 processes. */ 99 __RLIMIT_RTPRIO = 14, 100 #define RLIMIT_RTPRIO __RLIMIT_RTPRIO 101 102 /* Maximum CPU time in µs that a process scheduled under a real-time 103 scheduling policy may consume without making a blocking system 104 call before being forcibly descheduled. */ 105 __RLIMIT_RTTIME = 15, 106 #define RLIMIT_RTTIME __RLIMIT_RTTIME 107 108 __RLIMIT_NLIMITS = 16, 109 __RLIM_NLIMITS = __RLIMIT_NLIMITS 110 #define RLIMIT_NLIMITS __RLIMIT_NLIMITS 111 #define RLIM_NLIMITS __RLIM_NLIMITS 112 }; 113 114 /* Value to indicate that there is no limit. */ 115 #ifndef __USE_FILE_OFFSET64 116 # define RLIM_INFINITY ((unsigned long int)(~0UL)) 117 #else 118 # define RLIM_INFINITY 0xffffffffffffffffuLL 119 #endif 120 121 #ifdef __USE_LARGEFILE64 122 # define RLIM64_INFINITY 0xffffffffffffffffuLL 123 #endif 124 125 /* We can represent all limits. */ 126 #define RLIM_SAVED_MAX RLIM_INFINITY 127 #define RLIM_SAVED_CUR RLIM_INFINITY 128 129 130 /* Type for resource quantity measurement. */ 131 #ifndef __USE_FILE_OFFSET64 132 typedef __rlim_t rlim_t; 133 #else 134 typedef __rlim64_t rlim_t; 135 #endif 136 #ifdef __USE_LARGEFILE64 137 typedef __rlim64_t rlim64_t; 138 #endif 139 140 struct rlimit 141 { 142 /* The current (soft) limit. */ 143 rlim_t rlim_cur; 144 /* The hard limit. */ 145 rlim_t rlim_max; 146 }; 147 148 #ifdef __USE_LARGEFILE64 149 struct rlimit64 150 { 151 /* The current (soft) limit. */ 152 rlim64_t rlim_cur; 153 /* The hard limit. */ 154 rlim64_t rlim_max; 155 }; 156 #endif 157 158 /* Whose usage statistics do you want? */ 159 enum __rusage_who 160 { 161 /* The calling process. */ 162 RUSAGE_SELF = 0, 163 #define RUSAGE_SELF RUSAGE_SELF 164 165 /* All of its terminated child processes. */ 166 RUSAGE_CHILDREN = -1 167 #define RUSAGE_CHILDREN RUSAGE_CHILDREN 168 169 #ifdef __USE_GNU 170 , 171 /* The calling thread. */ 172 RUSAGE_THREAD = 1 173 # define RUSAGE_THREAD RUSAGE_THREAD 174 /* Name for the same functionality on Solaris. */ 175 # define RUSAGE_LWP RUSAGE_THREAD 176 #endif 177 }; 178 179 #define __need_timeval 180 #include <bits/time.h> /* For `struct timeval'. */ 181 182 /* Structure which says how much of each resource has been used. */ 183 struct rusage 184 { 185 /* Total amount of user time used. */ 186 struct timeval ru_utime; 187 /* Total amount of system time used. */ 188 struct timeval ru_stime; 189 /* Maximum resident set size (in kilobytes). */ 190 long int ru_maxrss; 191 /* Amount of sharing of text segment memory 192 with other processes (kilobyte-seconds). */ 193 long int ru_ixrss; 194 /* Amount of data segment memory used (kilobyte-seconds). */ 195 long int ru_idrss; 196 /* Amount of stack memory used (kilobyte-seconds). */ 197 long int ru_isrss; 198 /* Number of soft page faults (i.e. those serviced by reclaiming 199 a page from the list of pages awaiting reallocation. */ 200 long int ru_minflt; 201 /* Number of hard page faults (i.e. those that required I/O). */ 202 long int ru_majflt; 203 /* Number of times a process was swapped out of physical memory. */ 204 long int ru_nswap; 205 /* Number of input operations via the file system. Note: This 206 and `ru_oublock' do not include operations with the cache. */ 207 long int ru_inblock; 208 /* Number of output operations via the file system. */ 209 long int ru_oublock; 210 /* Number of IPC messages sent. */ 211 long int ru_msgsnd; 212 /* Number of IPC messages received. */ 213 long int ru_msgrcv; 214 /* Number of signals delivered. */ 215 long int ru_nsignals; 216 /* Number of voluntary context switches, i.e. because the process 217 gave up the process before it had to (usually to wait for some 218 resource to be available). */ 219 long int ru_nvcsw; 220 /* Number of involuntary context switches, i.e. a higher priority process 221 became runnable or the current process used up its time slice. */ 222 long int ru_nivcsw; 223 }; 224 225 /* Priority limits. */ 226 #define PRIO_MIN -20 /* Minimum priority a process can have. */ 227 #define PRIO_MAX 20 /* Maximum priority a process can have. */ 228 229 /* The type of the WHICH argument to `getpriority' and `setpriority', 230 indicating what flavor of entity the WHO argument specifies. */ 231 enum __priority_which 232 { 233 PRIO_PROCESS = 0, /* WHO is a process ID. */ 234 #define PRIO_PROCESS PRIO_PROCESS 235 PRIO_PGRP = 1, /* WHO is a process group ID. */ 236 #define PRIO_PGRP PRIO_PGRP 237 PRIO_USER = 2 /* WHO is a user ID. */ 238 #define PRIO_USER PRIO_USER 239 }; 240