.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
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),
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"
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':
break;
}
}
- if (argc > optind)
- usage(stderr);
+ if (argc > optind && pid)
+ errx(EXIT_FAILURE,
+ _("--pid option and COMMAND are mutually exclusive"));
if (!ncolumns) {
/* default columns */
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;
}