resource.h 7.0 KB

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