xref: /csrg-svn/usr.bin/renice/renice.c (revision 14086)
111614Ssam #ifndef lint
2*14086Ssam static	char *sccsid = "@(#)renice.c	4.5 (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*14086Ssam 	if (argc < 2) {
23*14086Ssam 		fprintf(stderr, "usage: renice priority who ...\n");
2414085Ssam 		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 	for (; argc > 0; argc--, argv++) {
3314085Ssam 		if (strcmp(*argv, "-g") == 0) {
3414085Ssam 			which = PRIO_PGRP;
3514085Ssam 			continue;
3614085Ssam 		}
3714085Ssam 		if (strcmp(*argv, "-u") == 0) {
3814085Ssam 			which = PRIO_USER;
3914085Ssam 			continue;
4014085Ssam 		}
4114085Ssam 		if (strcmp(*argv, "-p") == 0) {
4214085Ssam 			which = PRIO_PROCESS;
4314085Ssam 			continue;
4414085Ssam 		}
4511614Ssam 		if (which == PRIO_USER) {
4611614Ssam 			register struct passwd *pwd = getpwnam(*argv);
4711614Ssam 
4811614Ssam 			if (pwd == NULL) {
4911614Ssam 				fprintf(stderr, "renice: %s: unknown user\n",
5011614Ssam 					*argv);
5111614Ssam 				continue;
5211614Ssam 			}
5311617Ssam 			who = pwd->pw_uid;
5411614Ssam 		} else {
5511617Ssam 			who = atoi(*argv);
5611617Ssam 			if (who < 0) {
5711614Ssam 				fprintf(stderr, "renice: %s: bad value\n",
5811614Ssam 					*argv);
5911614Ssam 				continue;
6011614Ssam 			}
6111614Ssam 		}
6211617Ssam 		errs += donice(which, who, prio);
6311614Ssam 	}
6411614Ssam 	exit(errs != 0);
6511614Ssam }
6611614Ssam 
6711617Ssam donice(which, who, prio)
6811617Ssam 	int which, who, prio;
6911617Ssam {
7014085Ssam 	int oldprio;
7111617Ssam 	extern int errno;
7211617Ssam 
7314085Ssam 	errno = 0, oldprio = getpriority(which, who);
7411617Ssam 	if (oldprio == -1 && errno) {
7511617Ssam 		fprintf(stderr, "renice: %d: ", who);
7611617Ssam 		perror("getpriority");
7711617Ssam 		return (1);
7811617Ssam 	}
7911617Ssam 	if (setpriority(which, who, prio) < 0) {
8011617Ssam 		fprintf(stderr, "renice: %d: ", who);
8111617Ssam 		perror("setpriority");
8211617Ssam 		return (1);
8311617Ssam 	}
8411617Ssam 	printf("%d: old priority %d, new priority %d\n", who, oldprio, prio);
8511617Ssam 	return (0);
8611617Ssam }
87