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