/* renice.c - renice process
*
* Copyright 2013 CE Strake <strake888 at gmail.com>
*
* See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/renice.html
USE_RENICE(NEWTOY(renice, "<1gpun#|", TOYFLAG_USR|TOYFLAG_BIN))
config RENICE
bool "renice"
default y
help
usage: renice [-gpu] -n increment ID ...
*/
#define FOR_renice
#include "toys.h"
GLOBALS(
long n;
)
void renice_main(void) {
int which = (toys.optflags & FLAG_g) ? PRIO_PGRP :
((toys.optflags & FLAG_u) ? PRIO_USER : PRIO_PROCESS);
char **arg;
for (arg = toys.optargs; *arg; arg++) {
char *s = *arg;
int id = -1;
if (toys.optflags & FLAG_u) {
struct passwd *p = getpwnam(s);
if (p) id = p->pw_uid;
} else {
id = strtol(s, &s, 10);
if (*s) id = -1;
}
if (id < 0) {
error_msg("bad '%s'", *arg);
continue;
}
if (setpriority(which, id, getpriority(which, id)+TT.n) < 0)
perror_msg("setpriority %d", id);
}
}