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