111614Ssam #ifndef lint 2*14086Ssam static char *sccsid = "@(#)renice.c 4.5 (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*14086Ssam if (argc < 2) { 23*14086Ssam fprintf(stderr, "usage: renice priority who ...\n"); 2414085Ssam 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 for (; argc > 0; argc--, argv++) { 3314085Ssam if (strcmp(*argv, "-g") == 0) { 3414085Ssam which = PRIO_PGRP; 3514085Ssam continue; 3614085Ssam } 3714085Ssam if (strcmp(*argv, "-u") == 0) { 3814085Ssam which = PRIO_USER; 3914085Ssam continue; 4014085Ssam } 4114085Ssam if (strcmp(*argv, "-p") == 0) { 4214085Ssam which = PRIO_PROCESS; 4314085Ssam continue; 4414085Ssam } 4511614Ssam if (which == PRIO_USER) { 4611614Ssam register struct passwd *pwd = getpwnam(*argv); 4711614Ssam 4811614Ssam if (pwd == NULL) { 4911614Ssam fprintf(stderr, "renice: %s: unknown user\n", 5011614Ssam *argv); 5111614Ssam continue; 5211614Ssam } 5311617Ssam who = pwd->pw_uid; 5411614Ssam } else { 5511617Ssam who = atoi(*argv); 5611617Ssam if (who < 0) { 5711614Ssam fprintf(stderr, "renice: %s: bad value\n", 5811614Ssam *argv); 5911614Ssam continue; 6011614Ssam } 6111614Ssam } 6211617Ssam errs += donice(which, who, prio); 6311614Ssam } 6411614Ssam exit(errs != 0); 6511614Ssam } 6611614Ssam 6711617Ssam donice(which, who, prio) 6811617Ssam int which, who, prio; 6911617Ssam { 7014085Ssam int oldprio; 7111617Ssam extern int errno; 7211617Ssam 7314085Ssam errno = 0, oldprio = getpriority(which, who); 7411617Ssam if (oldprio == -1 && errno) { 7511617Ssam fprintf(stderr, "renice: %d: ", who); 7611617Ssam perror("getpriority"); 7711617Ssam return (1); 7811617Ssam } 7911617Ssam if (setpriority(which, who, prio) < 0) { 8011617Ssam fprintf(stderr, "renice: %d: ", who); 8111617Ssam perror("setpriority"); 8211617Ssam return (1); 8311617Ssam } 8411617Ssam printf("%d: old priority %d, new priority %d\n", who, oldprio, prio); 8511617Ssam return (0); 8611617Ssam } 87