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