(no message)
[unix-history] / usr / src / usr.bin / renice / renice.c
CommitLineData
47aa95b6 1#ifndef lint
29bac035 2static char *sccsid = "@(#)renice.c 4.6 (Berkeley) 83/07/24";
47aa95b6
SL
3#endif
4
ce4fd43b
SL
5#include <sys/time.h>
6#include <sys/resource.h>
47aa95b6
SL
7#include <stdio.h>
8#include <pwd.h>
9
10/*
11 * Change the priority (nice) of processes
12 * or groups of processes which are already
13 * running.
14 */
15main(argc, argv)
16 char **argv;
17{
18 int which = PRIO_PROCESS;
fe3b5491 19 int who = 0, prio, errs = 0;
47aa95b6
SL
20
21 argc--, argv++;
a9ad9e31 22 if (argc < 2) {
29bac035
SL
23 fprintf(stderr, "usage: renice priority [ [ -p ] pids ] ");
24 fprintf(stderr, "[ [ -g ] pgrps ] [ [ -u ] users ]\n");
6824099d 25 exit(1);
47aa95b6
SL
26 }
27 prio = atoi(*argv);
28 argc--, argv++;
29 if (prio > PRIO_MAX)
30 prio = PRIO_MAX;
31 if (prio < PRIO_MIN)
32 prio = PRIO_MIN;
47aa95b6 33 for (; argc > 0; argc--, argv++) {
6824099d
SL
34 if (strcmp(*argv, "-g") == 0) {
35 which = PRIO_PGRP;
36 continue;
37 }
38 if (strcmp(*argv, "-u") == 0) {
39 which = PRIO_USER;
40 continue;
41 }
42 if (strcmp(*argv, "-p") == 0) {
43 which = PRIO_PROCESS;
44 continue;
45 }
47aa95b6
SL
46 if (which == PRIO_USER) {
47 register struct passwd *pwd = getpwnam(*argv);
48
49 if (pwd == NULL) {
50 fprintf(stderr, "renice: %s: unknown user\n",
51 *argv);
52 continue;
53 }
fe3b5491 54 who = pwd->pw_uid;
47aa95b6 55 } else {
fe3b5491
SL
56 who = atoi(*argv);
57 if (who < 0) {
47aa95b6
SL
58 fprintf(stderr, "renice: %s: bad value\n",
59 *argv);
60 continue;
61 }
62 }
fe3b5491 63 errs += donice(which, who, prio);
47aa95b6
SL
64 }
65 exit(errs != 0);
66}
67
fe3b5491
SL
68donice(which, who, prio)
69 int which, who, prio;
70{
6824099d 71 int oldprio;
fe3b5491
SL
72 extern int errno;
73
6824099d 74 errno = 0, oldprio = getpriority(which, who);
fe3b5491
SL
75 if (oldprio == -1 && errno) {
76 fprintf(stderr, "renice: %d: ", who);
77 perror("getpriority");
78 return (1);
79 }
80 if (setpriority(which, who, prio) < 0) {
81 fprintf(stderr, "renice: %d: ", who);
82 perror("setpriority");
83 return (1);
84 }
85 printf("%d: old priority %d, new priority %d\n", who, oldprio, prio);
86 return (0);
87}