xref: /csrg-svn/usr.bin/renice/renice.c (revision 14085)
111614Ssam #ifndef lint
2*14085Ssam static	char *sccsid = "@(#)renice.c	4.4 (Berkeley) 83/07/24";
311614Ssam #endif
411614Ssam 
513606Ssam #include <sys/time.h>
613606Ssam #include <sys/resource.h>
711614Ssam #include <stdio.h>
811614Ssam #include <pwd.h>
911614Ssam 
1011614Ssam /*
1111614Ssam  * Change the priority (nice) of processes
1211614Ssam  * or groups of processes which are already
1311614Ssam  * running.
1411614Ssam  */
1511614Ssam main(argc, argv)
1611614Ssam 	char **argv;
1711614Ssam {
1811614Ssam 	int which = PRIO_PROCESS;
1911617Ssam 	int who = 0, prio, errs = 0;
2011614Ssam 
2111614Ssam 	argc--, argv++;
22*14085Ssam 	if (argc < 1) {
23*14085Ssam 		fprintf(stderr, "usage: renice priority [ who ... ]\n");
24*14085Ssam 		exit(1);
2511614Ssam 	}
2611614Ssam 	prio = atoi(*argv);
2711614Ssam 	argc--, argv++;
2811614Ssam 	if (prio > PRIO_MAX)
2911614Ssam 		prio = PRIO_MAX;
3011614Ssam 	if (prio < PRIO_MIN)
3111614Ssam 		prio = PRIO_MIN;
3211614Ssam 	if (argc == 0)
33*14085Ssam 		exit(donice(which, 0, prio));
3411614Ssam 	for (; argc > 0; argc--, argv++) {
35*14085Ssam 		if (strcmp(*argv, "-g") == 0) {
36*14085Ssam 			which = PRIO_PGRP;
37*14085Ssam 			continue;
38*14085Ssam 		}
39*14085Ssam 		if (strcmp(*argv, "-u") == 0) {
40*14085Ssam 			which = PRIO_USER;
41*14085Ssam 			continue;
42*14085Ssam 		}
43*14085Ssam 		if (strcmp(*argv, "-p") == 0) {
44*14085Ssam 			which = PRIO_PROCESS;
45*14085Ssam 			continue;
46*14085Ssam 		}
4711614Ssam 		if (which == PRIO_USER) {
4811614Ssam 			register struct passwd *pwd = getpwnam(*argv);
4911614Ssam 
5011614Ssam 			if (pwd == NULL) {
5111614Ssam 				fprintf(stderr, "renice: %s: unknown user\n",
5211614Ssam 					*argv);
5311614Ssam 				continue;
5411614Ssam 			}
5511617Ssam 			who = pwd->pw_uid;
5611614Ssam 		} else {
5711617Ssam 			who = atoi(*argv);
5811617Ssam 			if (who < 0) {
5911614Ssam 				fprintf(stderr, "renice: %s: bad value\n",
6011614Ssam 					*argv);
6111614Ssam 				continue;
6211614Ssam 			}
6311614Ssam 		}
6411617Ssam 		errs += donice(which, who, prio);
6511614Ssam 	}
6611614Ssam 	exit(errs != 0);
6711614Ssam }
6811614Ssam 
6911617Ssam donice(which, who, prio)
7011617Ssam 	int which, who, prio;
7111617Ssam {
72*14085Ssam 	int oldprio;
7311617Ssam 	extern int errno;
7411617Ssam 
75*14085Ssam 	errno = 0, oldprio = getpriority(which, who);
7611617Ssam 	if (oldprio == -1 && errno) {
7711617Ssam 		fprintf(stderr, "renice: %d: ", who);
7811617Ssam 		perror("getpriority");
7911617Ssam 		return (1);
8011617Ssam 	}
8111617Ssam 	if (setpriority(which, who, prio) < 0) {
8211617Ssam 		fprintf(stderr, "renice: %d: ", who);
8311617Ssam 		perror("setpriority");
8411617Ssam 		return (1);
8511617Ssam 	}
8611617Ssam 	printf("%d: old priority %d, new priority %d\n", who, oldprio, prio);
8711617Ssam 	return (0);
8811617Ssam }
89