111614Ssam #ifndef lint 2*11617Ssam static char *sccsid = "@(#)renice.c 4.2 (Berkeley) 83/03/19"; 311614Ssam #endif 411614Ssam 511614Ssam #include <time.h> 611614Ssam #include <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; 19*11617Ssam int who = 0, prio, errs = 0; 2011614Ssam 2111614Ssam argc--, argv++; 2211614Ssam if (argc < 2) 2311614Ssam usage(); 2411614Ssam if (strcmp(*argv, "-g") == 0) { 2511614Ssam which = PRIO_PGRP; 2611614Ssam argv++, argc--; 2711614Ssam } else if (strcmp(*argv, "-u") == 0) { 2811614Ssam which = PRIO_USER; 2911614Ssam argv++, argc--; 3011614Ssam } 3111614Ssam prio = atoi(*argv); 3211614Ssam argc--, argv++; 3311614Ssam if (prio > PRIO_MAX) 3411614Ssam prio = PRIO_MAX; 3511614Ssam if (prio < PRIO_MIN) 3611614Ssam prio = PRIO_MIN; 3711614Ssam if (argc == 0) 38*11617Ssam errs += donice(which, 0, prio); 3911614Ssam for (; argc > 0; argc--, argv++) { 4011614Ssam if (which == PRIO_USER) { 4111614Ssam register struct passwd *pwd = getpwnam(*argv); 4211614Ssam 4311614Ssam if (pwd == NULL) { 4411614Ssam fprintf(stderr, "renice: %s: unknown user\n", 4511614Ssam *argv); 4611614Ssam continue; 4711614Ssam } 48*11617Ssam who = pwd->pw_uid; 4911614Ssam } else { 50*11617Ssam who = atoi(*argv); 51*11617Ssam if (who < 0) { 5211614Ssam fprintf(stderr, "renice: %s: bad value\n", 5311614Ssam *argv); 5411614Ssam continue; 5511614Ssam } 5611614Ssam } 57*11617Ssam errs += donice(which, who, prio); 5811614Ssam } 5911614Ssam exit(errs != 0); 6011614Ssam } 6111614Ssam 62*11617Ssam donice(which, who, prio) 63*11617Ssam int which, who, prio; 64*11617Ssam { 65*11617Ssam int oldprio = getpriority(which, who); 66*11617Ssam extern int errno; 67*11617Ssam 68*11617Ssam if (oldprio == -1 && errno) { 69*11617Ssam fprintf(stderr, "renice: %d: ", who); 70*11617Ssam perror("getpriority"); 71*11617Ssam return (1); 72*11617Ssam } 73*11617Ssam if (setpriority(which, who, prio) < 0) { 74*11617Ssam fprintf(stderr, "renice: %d: ", who); 75*11617Ssam perror("setpriority"); 76*11617Ssam return (1); 77*11617Ssam } 78*11617Ssam printf("%d: old priority %d, new priority %d\n", who, oldprio, prio); 79*11617Ssam return (0); 80*11617Ssam } 81*11617Ssam 8211614Ssam usage() 8311614Ssam { 84*11617Ssam fprintf(stderr, "usage: renice priority [ pid .... ]\n"); 85*11617Ssam fprintf(stderr, "or, renice -g priority [ pgrp .... ]\n"); 86*11617Ssam fprintf(stderr, "or, renice -u priority [ user .... ]\n"); 8711614Ssam exit(1); 8811614Ssam } 89