Annotation of 41BSD/cmd/renice.c, revision 1.1

1.1     ! root        1: static char *sccsid = "@(#)renice.c    4.1 (Berkeley) 10/1/80";
        !             2: #include <sys/param.h>
        !             3: #include <sys/dir.h>
        !             4: #include <sys/user.h>
        !             5: #include <sys/proc.h>
        !             6: #include <nlist.h>
        !             7: #include <stdio.h>
        !             8: 
        !             9: struct proc proc[NPROC];
        !            10: struct nlist nl[] = {
        !            11:        {"_proc"}, {0}, 0,
        !            12:        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
        !            13: };
        !            14: 
        !            15: /*
        !            16:  * Change the running priority (nice) of a process which is already
        !            17:  * running.
        !            18:  *
        !            19:  * Author: Kurt Shoens
        !            20:  */
        !            21: 
        !            22: main(argc, argv)
        !            23:        char **argv;
        !            24: {
        !            25:        register struct proc *pp;
        !            26:        int pid, nice;
        !            27:        int addr, mem, a1, a2, coreaddr;
        !            28: 
        !            29:        if (argc != 2 && argc != 3) {
        !            30:                fprintf(stderr, "usage: renice pid [ priority ]\n");
        !            31:                exit(1);
        !            32:        }
        !            33:        if (geteuid()) {
        !            34:                fprintf(stderr, "NOT super user\n");
        !            35:                exit(1);
        !            36:        }
        !            37:        pid = atoi(argv[1]);
        !            38:        nice = atoi(argc == 3 ? argv[2] : "19");
        !            39:        if (nice > 20)
        !            40:                nice = 20;
        !            41:        if (nice < -20)
        !            42:                nice = -20;
        !            43:        nice += NZERO;
        !            44:        mem = open("/dev/kmem", 2);
        !            45:        if (mem < 0) {
        !            46:                perror("/dev/kmem");
        !            47:                exit(1);
        !            48:        }
        !            49:        nlist("/vmunix", nl);
        !            50:        addr = nl[0].n_value;
        !            51:        if (addr == 0) {
        !            52:                fprintf(stderr, "/vmunix: _proc not in namelist");
        !            53:                exit(1);
        !            54:        }
        !            55:        lseek(mem, addr, 0);
        !            56:        read(mem, &proc[0], sizeof proc);
        !            57:        for (pp = &proc[0]; pp < &proc[NPROC]; pp++)
        !            58:                if (pp->p_pid == pid)
        !            59:                        break;
        !            60:        if (pp >= &proc[NPROC]) {
        !            61:                fprintf(stderr, "%d: process not found\n", pid);
        !            62:                exit(1);
        !            63:        }
        !            64:        fprintf(stderr, "%d: old nice = %d, new nice = %d\n",
        !            65:                        pid, 
        !            66:                        pp->p_nice - NZERO,
        !            67:                        nice - NZERO);
        !            68:        a1 = (int)&pp->p_nice;
        !            69:        a2 = (int)&proc[0];
        !            70:        coreaddr = a1-a2+addr;
        !            71:        lseek(mem, (long)coreaddr, 0);
        !            72:        write(mem, &nice, 1);
        !            73: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.