2006-12-06 17:25:32 -06:00
|
|
|
|
/*
|
|
|
|
|
* Copyright (c) 1983, 1989, 1993
|
|
|
|
|
* The Regents of the University of California. All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
|
* are met:
|
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
|
|
|
* must display the following acknowledgement:
|
|
|
|
|
* This product includes software developed by the University of
|
|
|
|
|
* California, Berkeley and its contributors.
|
|
|
|
|
* 4. Neither the name of the University nor the names of its contributors
|
|
|
|
|
* may be used to endorse or promote products derived from this software
|
|
|
|
|
* without specific prior written permission.
|
|
|
|
|
*
|
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
|
* SUCH DAMAGE.
|
|
|
|
|
*/
|
|
|
|
|
|
2006-12-06 17:25:46 -06:00
|
|
|
|
/* 1999-02-22 Arkadiusz Mi<4D>kiewicz <misiek@pld.ORG.PL>
|
2006-12-06 17:25:39 -06:00
|
|
|
|
* - added Native Language Support
|
|
|
|
|
*/
|
|
|
|
|
|
2006-12-06 17:25:32 -06:00
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
#include <sys/time.h>
|
|
|
|
|
#include <sys/resource.h>
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <pwd.h>
|
2006-12-06 17:25:34 -06:00
|
|
|
|
#include <stdlib.h>
|
2006-12-06 17:25:44 -06:00
|
|
|
|
#include <string.h>
|
2006-12-06 17:25:39 -06:00
|
|
|
|
#include <errno.h>
|
|
|
|
|
#include "nls.h"
|
2011-01-25 15:44:52 -06:00
|
|
|
|
#include "c.h"
|
2012-04-04 12:49:40 -05:00
|
|
|
|
#include "closestream.h"
|
2006-12-06 17:25:34 -06:00
|
|
|
|
|
2010-11-24 16:10:14 -06:00
|
|
|
|
static int donice(int,int,int);
|
2006-12-06 17:25:32 -06:00
|
|
|
|
|
2010-12-10 09:47:18 -06:00
|
|
|
|
static void __attribute__((__noreturn__)) usage(FILE *out)
|
2008-01-12 23:35:50 -06:00
|
|
|
|
{
|
2011-08-16 06:20:54 -05:00
|
|
|
|
fputs(_("\nUsage:\n"), out);
|
|
|
|
|
fprintf(out,
|
|
|
|
|
_(" %1$s [-n] <priority> [-p] <pid> [<pid> ...]\n"
|
2010-11-30 05:46:06 -06:00
|
|
|
|
" %1$s [-n] <priority> -g <pgrp> [<pgrp> ...]\n"
|
|
|
|
|
" %1$s [-n] <priority> -u <user> [<user> ...]\n"),
|
|
|
|
|
program_invocation_short_name);
|
|
|
|
|
|
2011-08-16 06:20:54 -05:00
|
|
|
|
fputs(_("\nOptions:\n"), out);
|
|
|
|
|
fputs(_(" -g, --pgrp <id> interpret as process group ID\n"
|
2010-11-30 05:46:06 -06:00
|
|
|
|
" -h, --help print help\n"
|
|
|
|
|
" -n, --priority <num> set the nice increment value\n"
|
|
|
|
|
" -p, --pid <id> force to be interpreted as process ID\n"
|
|
|
|
|
" -u, --user <name|id> interpret as username or user ID\n"
|
2011-08-16 06:20:54 -05:00
|
|
|
|
" -v, --version print version\n"), out);
|
2010-11-30 05:46:06 -06:00
|
|
|
|
|
2011-08-16 06:20:54 -05:00
|
|
|
|
fputs(_("\nFor more information see renice(1).\n"), out);
|
2010-11-30 05:46:06 -06:00
|
|
|
|
|
|
|
|
|
exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
|
2008-01-12 23:35:50 -06:00
|
|
|
|
}
|
2009-03-09 15:09:50 -05:00
|
|
|
|
|
2006-12-06 17:25:32 -06:00
|
|
|
|
/*
|
|
|
|
|
* Change the priority (nice) of processes
|
|
|
|
|
* or groups of processes which are already
|
|
|
|
|
* running.
|
|
|
|
|
*/
|
2006-12-06 17:25:35 -06:00
|
|
|
|
int
|
|
|
|
|
main(int argc, char **argv)
|
2006-12-06 17:25:32 -06:00
|
|
|
|
{
|
|
|
|
|
int which = PRIO_PROCESS;
|
|
|
|
|
int who = 0, prio, errs = 0;
|
2008-01-12 23:35:50 -06:00
|
|
|
|
char *endptr = NULL;
|
2006-12-06 17:25:32 -06:00
|
|
|
|
|
2006-12-06 17:25:39 -06:00
|
|
|
|
setlocale(LC_ALL, "");
|
|
|
|
|
bindtextdomain(PACKAGE, LOCALEDIR);
|
|
|
|
|
textdomain(PACKAGE);
|
2012-04-04 12:49:40 -05:00
|
|
|
|
atexit(close_stdout);
|
2006-12-06 17:25:39 -06:00
|
|
|
|
|
2008-01-12 23:35:50 -06:00
|
|
|
|
argc--;
|
|
|
|
|
argv++;
|
|
|
|
|
|
|
|
|
|
if (argc == 1) {
|
|
|
|
|
if (strcmp(*argv, "-h") == 0 ||
|
|
|
|
|
strcmp(*argv, "--help") == 0)
|
2010-11-30 05:46:06 -06:00
|
|
|
|
usage(stdout);
|
2008-01-12 23:35:50 -06:00
|
|
|
|
|
|
|
|
|
if (strcmp(*argv, "-v") == 0 ||
|
|
|
|
|
strcmp(*argv, "--version") == 0) {
|
|
|
|
|
printf(_("renice from %s\n"), PACKAGE_STRING);
|
|
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
|
}
|
2006-12-06 17:25:32 -06:00
|
|
|
|
}
|
2008-01-12 23:35:50 -06:00
|
|
|
|
|
|
|
|
|
if (argc < 2)
|
2010-11-30 05:46:06 -06:00
|
|
|
|
usage(stderr);
|
2008-01-12 23:35:50 -06:00
|
|
|
|
|
2009-03-09 15:09:50 -05:00
|
|
|
|
if (strcmp(*argv, "-n") == 0 || strcmp(*argv, "--priority") == 0) {
|
|
|
|
|
argc--;
|
|
|
|
|
argv++;
|
|
|
|
|
}
|
|
|
|
|
|
2008-01-12 23:35:50 -06:00
|
|
|
|
prio = strtol(*argv, &endptr, 10);
|
|
|
|
|
if (*endptr)
|
2010-11-30 05:46:06 -06:00
|
|
|
|
usage(stderr);
|
2008-01-12 23:35:50 -06:00
|
|
|
|
|
|
|
|
|
argc--;
|
|
|
|
|
argv++;
|
|
|
|
|
|
2006-12-06 17:25:32 -06:00
|
|
|
|
for (; argc > 0; argc--, argv++) {
|
2008-01-12 23:35:50 -06:00
|
|
|
|
if (strcmp(*argv, "-g") == 0 || strcmp(*argv, "--pgrp") == 0) {
|
2006-12-06 17:25:32 -06:00
|
|
|
|
which = PRIO_PGRP;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2008-01-12 23:35:50 -06:00
|
|
|
|
if (strcmp(*argv, "-u") == 0 || strcmp(*argv, "--user") == 0) {
|
2006-12-06 17:25:32 -06:00
|
|
|
|
which = PRIO_USER;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
2008-01-12 23:35:50 -06:00
|
|
|
|
if (strcmp(*argv, "-p") == 0 || strcmp(*argv, "--pid") == 0) {
|
2006-12-06 17:25:32 -06:00
|
|
|
|
which = PRIO_PROCESS;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (which == PRIO_USER) {
|
|
|
|
|
register struct passwd *pwd = getpwnam(*argv);
|
2008-01-12 23:35:50 -06:00
|
|
|
|
|
2006-12-06 17:25:32 -06:00
|
|
|
|
if (pwd == NULL) {
|
2010-11-24 16:10:18 -06:00
|
|
|
|
warnx(_("unknown user %s"), *argv);
|
2006-12-06 17:25:32 -06:00
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
who = pwd->pw_uid;
|
|
|
|
|
} else {
|
2008-01-12 23:35:50 -06:00
|
|
|
|
who = strtol(*argv, &endptr, 10);
|
|
|
|
|
if (who < 0 || *endptr) {
|
2010-11-24 16:10:18 -06:00
|
|
|
|
warnx(_("bad value %s"), *argv);
|
2006-12-06 17:25:32 -06:00
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
errs += donice(which, who, prio);
|
|
|
|
|
}
|
2008-01-12 23:35:50 -06:00
|
|
|
|
return errs != 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
2006-12-06 17:25:32 -06:00
|
|
|
|
}
|
|
|
|
|
|
2010-11-24 16:10:14 -06:00
|
|
|
|
static int
|
2006-12-06 17:25:49 -06:00
|
|
|
|
donice(int which, int who, int prio) {
|
|
|
|
|
int oldprio, newprio;
|
renice: improve messages specifying what ID is referring to
Hello,
On 30/11/2010 13:01, Karel Zak wrote:
> Unfortunately, translators don't like this kind of strings where any
> translatable substring is inserted to the normal sentence. It would be
> better to use something like:
>
> "%d (%s): failed to set priority", who, idtype
>
> "%s: %d: failed to set priority", idtype, who
>
> or so...
or "failed to set priority for %d (%s)"?
From 536eb11f873f2c887e075a37ffb3c971cac258d5 Mon Sep 17 00:00:00 2001
From: Francesco Cosoleto <cosoleto@gmail.com>
Date: Mon, 6 Dec 2010 01:23:10 +0100
Subject: [PATCH] renice: improve messages specifying what ID is referring to
This version makes more clear the printed message specially when the
--user option is used.
Old version:
$ renice 19 10 -u fra -g 1
renice: 10: setpriority: Operation not permitted
renice: 1000: setpriority: Operation not permitted
renice: 1: setpriority: Operation not permitted
$ renice 19 -u fra
1000: old priority 0, new priority 19
New version:
$ renice 19 10 -u fra -g 1
renice: failed to set priority for 10 (process ID): Operation not permitted
renice: failed to set priority for 1000 (user ID): Operation not permitted
renice: failed to set priority for 1 (process group ID): Operation not permitted
$ renice 19 -u fra
1000 (user ID) old priority 0, new priority 19
Signed-off-by: Francesco Cosoleto <cosoleto@gmail.com>
2010-12-09 13:03:19 -06:00
|
|
|
|
const char *idtype = _("process ID");
|
|
|
|
|
|
|
|
|
|
if (which == PRIO_USER)
|
|
|
|
|
idtype = _("user ID");
|
|
|
|
|
else if (which == PRIO_PGRP)
|
|
|
|
|
idtype = _("process group ID");
|
2006-12-06 17:25:32 -06:00
|
|
|
|
|
2006-12-06 17:25:49 -06:00
|
|
|
|
errno = 0;
|
|
|
|
|
oldprio = getpriority(which, who);
|
2006-12-06 17:25:32 -06:00
|
|
|
|
if (oldprio == -1 && errno) {
|
renice: improve messages specifying what ID is referring to
Hello,
On 30/11/2010 13:01, Karel Zak wrote:
> Unfortunately, translators don't like this kind of strings where any
> translatable substring is inserted to the normal sentence. It would be
> better to use something like:
>
> "%d (%s): failed to set priority", who, idtype
>
> "%s: %d: failed to set priority", idtype, who
>
> or so...
or "failed to set priority for %d (%s)"?
From 536eb11f873f2c887e075a37ffb3c971cac258d5 Mon Sep 17 00:00:00 2001
From: Francesco Cosoleto <cosoleto@gmail.com>
Date: Mon, 6 Dec 2010 01:23:10 +0100
Subject: [PATCH] renice: improve messages specifying what ID is referring to
This version makes more clear the printed message specially when the
--user option is used.
Old version:
$ renice 19 10 -u fra -g 1
renice: 10: setpriority: Operation not permitted
renice: 1000: setpriority: Operation not permitted
renice: 1: setpriority: Operation not permitted
$ renice 19 -u fra
1000: old priority 0, new priority 19
New version:
$ renice 19 10 -u fra -g 1
renice: failed to set priority for 10 (process ID): Operation not permitted
renice: failed to set priority for 1000 (user ID): Operation not permitted
renice: failed to set priority for 1 (process group ID): Operation not permitted
$ renice 19 -u fra
1000 (user ID) old priority 0, new priority 19
Signed-off-by: Francesco Cosoleto <cosoleto@gmail.com>
2010-12-09 13:03:19 -06:00
|
|
|
|
warn(_("failed to get priority for %d (%s)"), who, idtype);
|
2008-01-12 23:35:50 -06:00
|
|
|
|
return 1;
|
2006-12-06 17:25:32 -06:00
|
|
|
|
}
|
|
|
|
|
if (setpriority(which, who, prio) < 0) {
|
renice: improve messages specifying what ID is referring to
Hello,
On 30/11/2010 13:01, Karel Zak wrote:
> Unfortunately, translators don't like this kind of strings where any
> translatable substring is inserted to the normal sentence. It would be
> better to use something like:
>
> "%d (%s): failed to set priority", who, idtype
>
> "%s: %d: failed to set priority", idtype, who
>
> or so...
or "failed to set priority for %d (%s)"?
From 536eb11f873f2c887e075a37ffb3c971cac258d5 Mon Sep 17 00:00:00 2001
From: Francesco Cosoleto <cosoleto@gmail.com>
Date: Mon, 6 Dec 2010 01:23:10 +0100
Subject: [PATCH] renice: improve messages specifying what ID is referring to
This version makes more clear the printed message specially when the
--user option is used.
Old version:
$ renice 19 10 -u fra -g 1
renice: 10: setpriority: Operation not permitted
renice: 1000: setpriority: Operation not permitted
renice: 1: setpriority: Operation not permitted
$ renice 19 -u fra
1000: old priority 0, new priority 19
New version:
$ renice 19 10 -u fra -g 1
renice: failed to set priority for 10 (process ID): Operation not permitted
renice: failed to set priority for 1000 (user ID): Operation not permitted
renice: failed to set priority for 1 (process group ID): Operation not permitted
$ renice 19 -u fra
1000 (user ID) old priority 0, new priority 19
Signed-off-by: Francesco Cosoleto <cosoleto@gmail.com>
2010-12-09 13:03:19 -06:00
|
|
|
|
warn(_("failed to set priority for %d (%s)"), who, idtype);
|
2008-01-12 23:35:50 -06:00
|
|
|
|
return 1;
|
2006-12-06 17:25:32 -06:00
|
|
|
|
}
|
2006-12-06 17:25:49 -06:00
|
|
|
|
errno = 0;
|
|
|
|
|
newprio = getpriority(which, who);
|
|
|
|
|
if (newprio == -1 && errno) {
|
renice: improve messages specifying what ID is referring to
Hello,
On 30/11/2010 13:01, Karel Zak wrote:
> Unfortunately, translators don't like this kind of strings where any
> translatable substring is inserted to the normal sentence. It would be
> better to use something like:
>
> "%d (%s): failed to set priority", who, idtype
>
> "%s: %d: failed to set priority", idtype, who
>
> or so...
or "failed to set priority for %d (%s)"?
From 536eb11f873f2c887e075a37ffb3c971cac258d5 Mon Sep 17 00:00:00 2001
From: Francesco Cosoleto <cosoleto@gmail.com>
Date: Mon, 6 Dec 2010 01:23:10 +0100
Subject: [PATCH] renice: improve messages specifying what ID is referring to
This version makes more clear the printed message specially when the
--user option is used.
Old version:
$ renice 19 10 -u fra -g 1
renice: 10: setpriority: Operation not permitted
renice: 1000: setpriority: Operation not permitted
renice: 1: setpriority: Operation not permitted
$ renice 19 -u fra
1000: old priority 0, new priority 19
New version:
$ renice 19 10 -u fra -g 1
renice: failed to set priority for 10 (process ID): Operation not permitted
renice: failed to set priority for 1000 (user ID): Operation not permitted
renice: failed to set priority for 1 (process group ID): Operation not permitted
$ renice 19 -u fra
1000 (user ID) old priority 0, new priority 19
Signed-off-by: Francesco Cosoleto <cosoleto@gmail.com>
2010-12-09 13:03:19 -06:00
|
|
|
|
warn(_("failed to get priority for %d (%s)"), who, idtype);
|
2008-01-12 23:35:50 -06:00
|
|
|
|
return 1;
|
2006-12-06 17:25:49 -06:00
|
|
|
|
}
|
|
|
|
|
|
renice: improve messages specifying what ID is referring to
Hello,
On 30/11/2010 13:01, Karel Zak wrote:
> Unfortunately, translators don't like this kind of strings where any
> translatable substring is inserted to the normal sentence. It would be
> better to use something like:
>
> "%d (%s): failed to set priority", who, idtype
>
> "%s: %d: failed to set priority", idtype, who
>
> or so...
or "failed to set priority for %d (%s)"?
From 536eb11f873f2c887e075a37ffb3c971cac258d5 Mon Sep 17 00:00:00 2001
From: Francesco Cosoleto <cosoleto@gmail.com>
Date: Mon, 6 Dec 2010 01:23:10 +0100
Subject: [PATCH] renice: improve messages specifying what ID is referring to
This version makes more clear the printed message specially when the
--user option is used.
Old version:
$ renice 19 10 -u fra -g 1
renice: 10: setpriority: Operation not permitted
renice: 1000: setpriority: Operation not permitted
renice: 1: setpriority: Operation not permitted
$ renice 19 -u fra
1000: old priority 0, new priority 19
New version:
$ renice 19 10 -u fra -g 1
renice: failed to set priority for 10 (process ID): Operation not permitted
renice: failed to set priority for 1000 (user ID): Operation not permitted
renice: failed to set priority for 1 (process group ID): Operation not permitted
$ renice 19 -u fra
1000 (user ID) old priority 0, new priority 19
Signed-off-by: Francesco Cosoleto <cosoleto@gmail.com>
2010-12-09 13:03:19 -06:00
|
|
|
|
printf(_("%d (%s) old priority %d, new priority %d\n"),
|
|
|
|
|
who, idtype, oldprio, newprio);
|
2006-12-06 17:25:49 -06:00
|
|
|
|
return 0;
|
2006-12-06 17:25:32 -06:00
|
|
|
|
}
|