111614Ssam #ifndef lint 2*14085Ssam static char *sccsid = "@(#)renice.c 4.4 (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*14085Ssam if (argc < 1) { 23*14085Ssam fprintf(stderr, "usage: renice priority [ who ... ]\n"); 24*14085Ssam 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 if (argc == 0) 33*14085Ssam exit(donice(which, 0, prio)); 3411614Ssam for (; argc > 0; argc--, argv++) { 35*14085Ssam if (strcmp(*argv, "-g") == 0) { 36*14085Ssam which = PRIO_PGRP; 37*14085Ssam continue; 38*14085Ssam } 39*14085Ssam if (strcmp(*argv, "-u") == 0) { 40*14085Ssam which = PRIO_USER; 41*14085Ssam continue; 42*14085Ssam } 43*14085Ssam if (strcmp(*argv, "-p") == 0) { 44*14085Ssam which = PRIO_PROCESS; 45*14085Ssam continue; 46*14085Ssam } 4711614Ssam if (which == PRIO_USER) { 4811614Ssam register struct passwd *pwd = getpwnam(*argv); 4911614Ssam 5011614Ssam if (pwd == NULL) { 5111614Ssam fprintf(stderr, "renice: %s: unknown user\n", 5211614Ssam *argv); 5311614Ssam continue; 5411614Ssam } 5511617Ssam who = pwd->pw_uid; 5611614Ssam } else { 5711617Ssam who = atoi(*argv); 5811617Ssam if (who < 0) { 5911614Ssam fprintf(stderr, "renice: %s: bad value\n", 6011614Ssam *argv); 6111614Ssam continue; 6211614Ssam } 6311614Ssam } 6411617Ssam errs += donice(which, who, prio); 6511614Ssam } 6611614Ssam exit(errs != 0); 6711614Ssam } 6811614Ssam 6911617Ssam donice(which, who, prio) 7011617Ssam int which, who, prio; 7111617Ssam { 72*14085Ssam int oldprio; 7311617Ssam extern int errno; 7411617Ssam 75*14085Ssam errno = 0, oldprio = getpriority(which, who); 7611617Ssam if (oldprio == -1 && errno) { 7711617Ssam fprintf(stderr, "renice: %d: ", who); 7811617Ssam perror("getpriority"); 7911617Ssam return (1); 8011617Ssam } 8111617Ssam if (setpriority(which, who, prio) < 0) { 8211617Ssam fprintf(stderr, "renice: %d: ", who); 8311617Ssam perror("setpriority"); 8411617Ssam return (1); 8511617Ssam } 8611617Ssam printf("%d: old priority %d, new priority %d\n", who, oldprio, prio); 8711617Ssam return (0); 8811617Ssam } 89