1 #ifndef lint 2 static char *sccsid = "@(#)renice.c 4.6 (Berkeley) 83/07/24"; 3 #endif 4 5 #include <sys/time.h> 6 #include <sys/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 fprintf(stderr, "usage: renice priority [ [ -p ] pids ] "); 24 fprintf(stderr, "[ [ -g ] pgrps ] [ [ -u ] users ]\n"); 25 exit(1); 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; 33 for (; argc > 0; argc--, argv++) { 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 } 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 } 54 who = pwd->pw_uid; 55 } else { 56 who = atoi(*argv); 57 if (who < 0) { 58 fprintf(stderr, "renice: %s: bad value\n", 59 *argv); 60 continue; 61 } 62 } 63 errs += donice(which, who, prio); 64 } 65 exit(errs != 0); 66 } 67 68 donice(which, who, prio) 69 int which, who, prio; 70 { 71 int oldprio; 72 extern int errno; 73 74 errno = 0, oldprio = getpriority(which, who); 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 } 88