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