xref: /third_party/toybox/toys/posix/renice.c (revision 0f66f451)
1/* renice.c - renice process
2 *
3 * Copyright 2013 CE Strake <strake888 at gmail.com>
4 *
5 * See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/renice.html
6
7USE_RENICE(NEWTOY(renice, "<1gpun#|", TOYFLAG_USR|TOYFLAG_BIN))
8
9config RENICE
10  bool "renice"
11  default y
12  help
13    usage: renice [-gpu] -n INCREMENT ID...
14*/
15
16#define FOR_renice
17#include "toys.h"
18
19GLOBALS(
20  long n;
21)
22
23void renice_main(void) {
24  int which = (toys.optflags & FLAG_g) ? PRIO_PGRP :
25              ((toys.optflags & FLAG_u) ? PRIO_USER : PRIO_PROCESS);
26  char **arg;
27
28  for (arg = toys.optargs; *arg; arg++) {
29    char *s = *arg;
30    int id = -1;
31
32    if (toys.optflags & FLAG_u) {
33      struct passwd *p = getpwnam(s);
34      if (p) id = p->pw_uid;
35    } else {
36      id = strtol(s, &s, 10);
37      if (*s) id = -1;
38    }
39
40    if (id < 0) {
41      error_msg("bad '%s'", *arg);
42      continue;
43    }
44
45    if (setpriority(which, id, getpriority(which, id)+TT.n) < 0)
46      perror_msg("setpriority %d", id);
47  }
48}
49