|
|
1.1 ! root 1: #ifndef lint ! 2: static char *sccsid = "@(#)renice.c 4.6 (Berkeley) 83/07/24"; ! 3: #endif ! 4: ! 5: #include <sys/time.h> ! 6: #include <sys/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: fprintf(stderr, "usage: renice priority [ [ -p ] pids ] "); ! 24: fprintf(stderr, "[ [ -g ] pgrps ] [ [ -u ] users ]\n"); ! 25: exit(1); ! 26: } ! 27: prio = atoi(*argv); ! 28: argc--, argv++; ! 29: if (prio > PRIO_MAX) ! 30: prio = PRIO_MAX; ! 31: if (prio < PRIO_MIN) ! 32: prio = PRIO_MIN; ! 33: for (; argc > 0; argc--, argv++) { ! 34: if (strcmp(*argv, "-g") == 0) { ! 35: which = PRIO_PGRP; ! 36: continue; ! 37: } ! 38: if (strcmp(*argv, "-u") == 0) { ! 39: which = PRIO_USER; ! 40: continue; ! 41: } ! 42: if (strcmp(*argv, "-p") == 0) { ! 43: which = PRIO_PROCESS; ! 44: continue; ! 45: } ! 46: if (which == PRIO_USER) { ! 47: register struct passwd *pwd = getpwnam(*argv); ! 48: ! 49: if (pwd == NULL) { ! 50: fprintf(stderr, "renice: %s: unknown user\n", ! 51: *argv); ! 52: continue; ! 53: } ! 54: who = pwd->pw_uid; ! 55: } else { ! 56: who = atoi(*argv); ! 57: if (who < 0) { ! 58: fprintf(stderr, "renice: %s: bad value\n", ! 59: *argv); ! 60: continue; ! 61: } ! 62: } ! 63: errs += donice(which, who, prio); ! 64: } ! 65: exit(errs != 0); ! 66: } ! 67: ! 68: donice(which, who, prio) ! 69: int which, who, prio; ! 70: { ! 71: int oldprio; ! 72: extern int errno; ! 73: ! 74: errno = 0, oldprio = getpriority(which, who); ! 75: if (oldprio == -1 && errno) { ! 76: fprintf(stderr, "renice: %d: ", who); ! 77: perror("getpriority"); ! 78: return (1); ! 79: } ! 80: if (setpriority(which, who, prio) < 0) { ! 81: fprintf(stderr, "renice: %d: ", who); ! 82: perror("setpriority"); ! 83: return (1); ! 84: } ! 85: printf("%d: old priority %d, new priority %d\n", who, oldprio, prio); ! 86: return (0); ! 87: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.