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