All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bernhard Voelker <mail@bernhard-voelker.de>
To: "util-linux@vger.kernel.org" <util-linux@vger.kernel.org>
Subject: [PATCH] prlimit: add support for executing a command
Date: Wed, 16 Nov 2011 17:57:27 +0100	[thread overview]
Message-ID: <4EC3EB77.2020000@bernhard-voelker.de> (raw)

[-- Attachment #1: Type: text/plain, Size: 228 bytes --]

As previously dicussed [1] here comes the patch for executing a command
(alternatively to setting limits for a running process via --pid).

[1] http://article.gmane.org/gmane.linux.utilities.util-linux-ng/5038,

Have fun,
Berny

[-- Attachment #2: prlimit-exec.patch --]
[-- Type: text/x-patch, Size: 3366 bytes --]

>From cd30ce6baa45fe9b58c50fea0caf3ab8bd81a066 Mon Sep 17 00:00:00 2001
From: Bernhard Voelker <mail@bernhard-voelker.de>
Date: Wed, 16 Nov 2011 17:42:01 +0100
Subject: [PATCH] prlimit: add support for executing a command

prlimit.c: Alternatively to applying the limits to an existing process via the
--pid option, allow a command to be executed. Adapted usage() accordingly.

prlimit.1: mention new syntax.

Signed-off-by: Bernhard Voelker <mail@bernhard-voelker.de>
---
 sys-utils/prlimit.1 |   14 +++++++++++++-
 sys-utils/prlimit.c |   17 +++++++++++++----
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/sys-utils/prlimit.1 b/sys-utils/prlimit.1
index cc40ac4..6b91214 100644
--- a/sys-utils/prlimit.1
+++ b/sys-utils/prlimit.1
@@ -9,12 +9,22 @@ get and set a process resource limits.
 .SH SYNOPSIS
 .B prlimit
 .RB [options]
-.RB [ \-\-{resource_name}[=limits] ]
+.RB [ \-\-{resource_name}[=limits]
+.RB [ \-\-pid\ PID]
+
+.B prlimit
+.RB [options]
+.RB [ \-\-{resource_name}[=limits]]
+.RB "command " [ argument ...]
 
 .SH DESCRIPTION
 Given a process id and one or more resources, \fBprlimit\fP tries to retrieve
 and/or modify the limits.
 
+When \fIcommand\fR is given,
+.B prlimit
+will run this command with the given arguments.
+
 The \fIlimits\fP format is composed by a soft and a hard (ceiling) value, separated
 by a semicolon (:), in order to modify the existing value(s). If no limits are
 used, \fBprlimit\fP will only display the current values. If one of the values
@@ -92,6 +102,8 @@ of open files to 1024 and 4095, respectively.
 Modify only the soft limit for the amount of processes.
 .IP "\fBprlimit \-\-pid $$ --nproc=unlimited\fP"
 Set the amount of processes for both soft and ceiling values to unlimited.
+.IP "\fBprlimit --cpu=10 sort -u hugefile\fP"
+Set the soft and hard CPU time limit and run 'sort'.
 
 .SH "SEE ALSO"
 .BR prlimit (2),
diff --git a/sys-utils/prlimit.c b/sys-utils/prlimit.c
index bcbfb5a..1d91909 100644
--- a/sys-utils/prlimit.c
+++ b/sys-utils/prlimit.c
@@ -152,7 +152,9 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out)
 	fputs(USAGE_HEADER, out);
 
 	fprintf(out,
-		_(" %s [options]\n"), program_invocation_short_name);
+		_(" %s [options] [-p PID]\n"), program_invocation_short_name);
+	fprintf(out,
+		_(" %s [options] COMMAND\n"), program_invocation_short_name);
 
 	fputs(_("\nGeneral Options:\n"), out);
 	fputs(_(" -p, --pid <pid>        process id\n"
@@ -521,7 +523,7 @@ int main(int argc, char **argv)
 	assert(MAX_RESOURCES == STACK + 1);
 
 	while((opt = getopt_long(argc, argv,
-				 "c::d::e::f::i::l::m::n::q::r::s::t::u::v::x::y::p:o:vVh",
+				 "+c::d::e::f::i::l::m::n::q::r::s::t::u::v::x::y::p:o:vVh",
 				 longopts, NULL)) != -1) {
 		switch(opt) {
 		case 'c':
@@ -608,8 +610,9 @@ int main(int argc, char **argv)
 			break;
 		}
 	}
-	if (argc > optind)
-		usage(stderr);
+	if (argc > optind && pid)
+		errx(EXIT_FAILURE,
+			_("--pid option and COMMAND are mutually exclusive"));
 
 	if (!ncolumns) {
 		/* default columns */
@@ -632,6 +635,12 @@ int main(int argc, char **argv)
 
 	if (!list_empty(&lims))
 		show_limits(&lims, tt_flags);
+		
+	if (argc > optind) {
+		/* prlimit [options] COMMAND */			
+		execvp(argv[optind], &argv[optind]);
+		err(EXIT_FAILURE, _("executing %s failed"), argv[optind]);
+	}
 
 	return EXIT_SUCCESS;
 }
-- 
1.7.3.4


             reply	other threads:[~2011-11-16 16:57 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-16 16:57 Bernhard Voelker [this message]
2011-11-23 11:49 ` [PATCH] prlimit: add support for executing a command Karel Zak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4EC3EB77.2020000@bernhard-voelker.de \
    --to=mail@bernhard-voelker.de \
    --cc=util-linux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.