diff options
author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2010-10-11 14:49:26 -0700 |
---|---|---|
committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2010-10-11 15:19:40 -0700 |
commit | 011c1d1c0766c65517ebd495465c99e86edb63ec (patch) | |
tree | 30d8f6a13235af90897c3223554871ef52225462 /builtins/ulimit.def | |
parent | 40cfaccf7b178b6239b5cd0013ef80b7ff8e503e (diff) | |
download | vyatta-bash-011c1d1c0766c65517ebd495465c99e86edb63ec.tar.gz vyatta-bash-011c1d1c0766c65517ebd495465c99e86edb63ec.zip |
Update to bash-4.1
Diffstat (limited to 'builtins/ulimit.def')
-rw-r--r-- | builtins/ulimit.def | 132 |
1 files changed, 77 insertions, 55 deletions
diff --git a/builtins/ulimit.def b/builtins/ulimit.def index 2d2e7b2..7c1e256 100644 --- a/builtins/ulimit.def +++ b/builtins/ulimit.def @@ -1,62 +1,68 @@ This file is ulimit.def, from which is created ulimit.c. It implements the builtin "ulimit" in Bash. -Copyright (C) 1987-2005 Free Software Foundation, Inc. +Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. -Bash is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Bash is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. -Bash is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. +Bash is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with Bash; see the file COPYING. If not, write to the Free Software -Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. +You should have received a copy of the GNU General Public License +along with Bash. If not, see <http://www.gnu.org/licenses/>. $PRODUCES ulimit.c $BUILTIN ulimit $FUNCTION ulimit_builtin $DEPENDS_ON !_MINIX -$SHORT_DOC ulimit [-SHacdfilmnpqstuvx] [limit] -Ulimit provides control over the resources available to processes -started by the shell, on systems that allow such control. If an -option is given, it is interpreted as follows: - - -S use the `soft' resource limit - -H use the `hard' resource limit - -a all current limits are reported - -c the maximum size of core files created - -d the maximum size of a process's data segment - -e the maximum scheduling priority (`nice') - -f the maximum size of files written by the shell and its children - -i the maximum number of pending signals - -l the maximum size a process may lock into memory - -m the maximum resident set size - -n the maximum number of open file descriptors - -p the pipe buffer size - -q the maximum number of bytes in POSIX message queues - -r the maximum real-time scheduling priority - -s the maximum stack size - -t the maximum amount of cpu time in seconds - -u the maximum number of user processes - -v the size of virtual memory - -x the maximum number of file locks - -If LIMIT is given, it is the new value of the specified resource; -the special LIMIT values `soft', `hard', and `unlimited' stand for -the current soft limit, the current hard limit, and no limit, respectively. -Otherwise, the current value of the specified resource is printed. -If no option is given, then -f is assumed. Values are in 1024-byte -increments, except for -t, which is in seconds, -p, which is in -increments of 512 bytes, and -u, which is an unscaled number of -processes. +$SHORT_DOC ulimit [-SHacdefilmnpqrstuvx] [limit] +Modify shell resource limits. + +Provides control over the resources available to the shell and processes +it creates, on systems that allow such control. + +Options: + -S use the `soft' resource limit + -H use the `hard' resource limit + -a all current limits are reported + -b the socket buffer size + -c the maximum size of core files created + -d the maximum size of a process's data segment + -e the maximum scheduling priority (`nice') + -f the maximum size of files written by the shell and its children + -i the maximum number of pending signals + -l the maximum size a process may lock into memory + -m the maximum resident set size + -n the maximum number of open file descriptors + -p the pipe buffer size + -q the maximum number of bytes in POSIX message queues + -r the maximum real-time scheduling priority + -s the maximum stack size + -t the maximum amount of cpu time in seconds + -u the maximum number of user processes + -v the size of virtual memory + -x the maximum number of file locks + +If LIMIT is given, it is the new value of the specified resource; the +special LIMIT values `soft', `hard', and `unlimited' stand for the +current soft limit, the current hard limit, and no limit, respectively. +Otherwise, the current value of the specified resource is printed. If +no option is given, then -f is assumed. + +Values are in 1024-byte increments, except for -t, which is in seconds, +-p, which is in increments of 512 bytes, and -u, which is an unscaled +number of processes. + +Exit Status: +Returns success unless an invalid option is supplied or an error occurs. $END #if !defined (_MINIX) @@ -98,7 +104,7 @@ extern int errno; # if defined (HPUX) && defined (RLIMIT_NEEDS_KERNEL) # undef _KERNEL # endif -#else +#elif defined (HAVE_SYS_TIMES_H) # include <sys/times.h> #endif @@ -172,6 +178,14 @@ extern int errno; #define LIMIT_HARD 0x01 #define LIMIT_SOFT 0x02 +/* "Blocks" are defined as 512 bytes when in Posix mode and 1024 bytes + otherwise. */ +#define POSIXBLK -2 + +#define BLOCKSIZE(x) (((x) == POSIXBLK) ? (posixly_correct ? 512 : 1024) : (x)) + +extern int posixly_correct; + static int _findlim __P((int)); static int ulimit_internal __P((int, char *, int, int)); @@ -193,13 +207,19 @@ typedef struct { int option; /* The ulimit option for this limit. */ int parameter; /* Parameter to pass to get_limit (). */ int block_factor; /* Blocking factor for specific limit. */ - char *description; /* Descriptive string to output. */ - char *units; /* scale */ + const char * const description; /* Descriptive string to output. */ + const char * const units; /* scale */ } RESOURCE_LIMITS; static RESOURCE_LIMITS limits[] = { +#ifdef RLIMIT_PTHREAD + { 'T', RLIMIT_PTHREAD, 1, "number of threads", (char *)NULL }, +#endif +#ifdef RLIMIT_SBSIZE + { 'b', RLIMIT_SBSIZE, 1, "socket buffer size", "bytes" }, +#endif #ifdef RLIMIT_CORE - { 'c', RLIMIT_CORE, 1024, "core file size", "blocks" }, + { 'c', RLIMIT_CORE, POSIXBLK, "core file size", "blocks" }, #endif #ifdef RLIMIT_DATA { 'd', RLIMIT_DATA, 1024, "data seg size", "kbytes" }, @@ -207,7 +227,7 @@ static RESOURCE_LIMITS limits[] = { #ifdef RLIMIT_NICE { 'e', RLIMIT_NICE, 1, "scheduling priority", (char *)NULL }, #endif - { 'f', RLIMIT_FILESIZE, 1024, "file size", "blocks" }, + { 'f', RLIMIT_FILESIZE, POSIXBLK, "file size", "blocks" }, #ifdef RLIMIT_SIGPENDING { 'i', RLIMIT_SIGPENDING, 1, "pending signals", (char *)NULL }, #endif @@ -356,7 +376,7 @@ ulimit_builtin (list) } #endif print_all_limits (mode == 0 ? LIMIT_SOFT : mode); - return (EXECUTION_SUCCESS); + return (sh_chkwrite (EXECUTION_SUCCESS)); } /* default is `ulimit -f' */ @@ -425,12 +445,12 @@ ulimit_internal (cmd, cmdarg, mode, multiple) else if (all_digits (cmdarg)) { limit = string_to_rlimtype (cmdarg); - block_factor = limits[limind].block_factor; + block_factor = BLOCKSIZE(limits[limind].block_factor); real_limit = limit * block_factor; if ((real_limit / block_factor) != limit) { - sh_erange (cmdarg, "limit"); + sh_erange (cmdarg, _("limit")); return (EXECUTION_FAILURE); } } @@ -687,7 +707,9 @@ printone (limind, curlim, pdesc) int pdesc; { char unitstr[64]; + int factor; + factor = BLOCKSIZE(limits[limind].block_factor); if (pdesc) { if (limits[limind].units) @@ -704,7 +726,7 @@ printone (limind, curlim, pdesc) else if (curlim == RLIM_SAVED_CUR) puts ("soft"); else - print_rlimtype ((curlim / limits[limind].block_factor), 1); + print_rlimtype ((curlim / factor), 1); } /* Set all limits to NEWLIM. NEWLIM currently must be RLIM_INFINITY, which @@ -740,7 +762,7 @@ set_all_limits (mode, newlim) for (retval = i = 0; limits[i].option > 0; i++) if (set_limit (i, newlim, mode) < 0) { - builtin_error ("%s: cannot modify limit: %s", limits[i].description, + builtin_error (_("%s: cannot modify limit: %s"), limits[i].description, strerror (errno)); retval = 1; } |