xref: /original-bsd/usr.bin/renice/renice.c (revision 92d3de31)
1 #ifndef lint
2 static	char *sccsid = "@(#)renice.c	4.2 (Berkeley) 83/03/19";
3 #endif
4 
5 #include <time.h>
6 #include <resource.h>
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  */
15 main(argc, argv)
16 	char **argv;
17 {
18 	int which = PRIO_PROCESS;
19 	int who = 0, prio, errs = 0;
20 
21 	argc--, argv++;
22 	if (argc < 2)
23 		usage();
24 	if (strcmp(*argv, "-g") == 0) {
25 		which = PRIO_PGRP;
26 		argv++, argc--;
27 	} else if (strcmp(*argv, "-u") == 0) {
28 		which = PRIO_USER;
29 		argv++, argc--;
30 	}
31 	prio = atoi(*argv);
32 	argc--, argv++;
33 	if (prio > PRIO_MAX)
34 		prio = PRIO_MAX;
35 	if (prio < PRIO_MIN)
36 		prio = PRIO_MIN;
37 	if (argc == 0)
38 		errs += donice(which, 0, prio);
39 	for (; argc > 0; argc--, argv++) {
40 		if (which == PRIO_USER) {
41 			register struct passwd *pwd = getpwnam(*argv);
42 
43 			if (pwd == NULL) {
44 				fprintf(stderr, "renice: %s: unknown user\n",
45 					*argv);
46 				continue;
47 			}
48 			who = pwd->pw_uid;
49 		} else {
50 			who = atoi(*argv);
51 			if (who < 0) {
52 				fprintf(stderr, "renice: %s: bad value\n",
53 					*argv);
54 				continue;
55 			}
56 		}
57 		errs += donice(which, who, prio);
58 	}
59 	exit(errs != 0);
60 }
61 
62 donice(which, who, prio)
63 	int which, who, prio;
64 {
65 	int oldprio = getpriority(which, who);
66 	extern int errno;
67 
68 	if (oldprio == -1 && errno) {
69 		fprintf(stderr, "renice: %d: ", who);
70 		perror("getpriority");
71 		return (1);
72 	}
73 	if (setpriority(which, who, prio) < 0) {
74 		fprintf(stderr, "renice: %d: ", who);
75 		perror("setpriority");
76 		return (1);
77 	}
78 	printf("%d: old priority %d, new priority %d\n", who, oldprio, prio);
79 	return (0);
80 }
81 
82 usage()
83 {
84 	fprintf(stderr, "usage: renice priority [ pid .... ]\n");
85 	fprintf(stderr, "or, renice -g priority [ pgrp .... ]\n");
86 	fprintf(stderr, "or, renice -u priority [ user .... ]\n");
87 	exit(1);
88 }
89