111614Ssam #ifndef lint 2*13606Ssam static char *sccsid = "@(#)renice.c 4.3 (Berkeley) 83/07/02"; 311614Ssam #endif 411614Ssam 5*13606Ssam #include <sys/time.h> 6*13606Ssam #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++; 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) 3811617Ssam 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 } 4811617Ssam who = pwd->pw_uid; 4911614Ssam } else { 5011617Ssam who = atoi(*argv); 5111617Ssam if (who < 0) { 5211614Ssam fprintf(stderr, "renice: %s: bad value\n", 5311614Ssam *argv); 5411614Ssam continue; 5511614Ssam } 5611614Ssam } 5711617Ssam errs += donice(which, who, prio); 5811614Ssam } 5911614Ssam exit(errs != 0); 6011614Ssam } 6111614Ssam 6211617Ssam donice(which, who, prio) 6311617Ssam int which, who, prio; 6411617Ssam { 6511617Ssam int oldprio = getpriority(which, who); 6611617Ssam extern int errno; 6711617Ssam 6811617Ssam if (oldprio == -1 && errno) { 6911617Ssam fprintf(stderr, "renice: %d: ", who); 7011617Ssam perror("getpriority"); 7111617Ssam return (1); 7211617Ssam } 7311617Ssam if (setpriority(which, who, prio) < 0) { 7411617Ssam fprintf(stderr, "renice: %d: ", who); 7511617Ssam perror("setpriority"); 7611617Ssam return (1); 7711617Ssam } 7811617Ssam printf("%d: old priority %d, new priority %d\n", who, oldprio, prio); 7911617Ssam return (0); 8011617Ssam } 8111617Ssam 8211614Ssam usage() 8311614Ssam { 8411617Ssam fprintf(stderr, "usage: renice priority [ pid .... ]\n"); 8511617Ssam fprintf(stderr, "or, renice -g priority [ pgrp .... ]\n"); 8611617Ssam fprintf(stderr, "or, renice -u priority [ user .... ]\n"); 8711614Ssam exit(1); 8811614Ssam } 89