Annotation of researchv9/cmd/kill.c, revision 1.1

1.1     ! root        1: static char *sccsid = "@(#)kill.c      4.2 (Berkeley) 10/9/80";
        !             2: /*
        !             3:  * kill - send signal to process
        !             4:  */
        !             5: 
        !             6: #include <signal.h>
        !             7: #include <ctype.h>
        !             8: 
        !             9: char *signm[NSIG+1] = { 0,
        !            10: "SIGHUP", "SIGINT", "SIGQUIT", "SIGILL", "SIGTRAP", "SIGIOT", "SIGEMT", "SIGFPE",      /* 1-8 */
        !            11: "SIGKILL", "SIGBUS", "SIGSEGV", "SIGSYS", "SIGPIPE", "SIGALRM", "SIGTERM", 0,  /* 9-16 */
        !            12: "SIGSTOP", "SIGTSTP", "SIGCONT", "SIGCHLD", "SIGTTIN", "SIGTTOU", "SIGTINT", "SIGXCPU",        /* 17-24 */
        !            13: "SIGXFSZ"                              /* 25- */
        !            14: };
        !            15: 
        !            16: main(argc, argv)
        !            17: char **argv;
        !            18: {
        !            19:        register signo, pid, res;
        !            20:        int errlev;
        !            21:        extern char *sys_errlist[];
        !            22:        extern errno;
        !            23: 
        !            24:        errlev = 0;
        !            25:        if (argc <= 1) {
        !            26:        usage:
        !            27:                printf("usage: kill [ -sig ] pid ...\n");
        !            28:                printf("for a list of signals: kill -l\n");
        !            29:                exit(2);
        !            30:        }
        !            31:        if (*argv[1] == '-') {
        !            32:                if (argv[1][1] == 'l') {
        !            33:                        int i = 0;
        !            34:                        for (signo = 1; signo <= NSIG; signo++)
        !            35:                                if (signm[signo]) {
        !            36:                                        printf("%s ", signm[signo]);
        !            37:                                        if (++i%8 == 0)
        !            38:                                                printf("\n");
        !            39:                                }
        !            40:                        if(i%8 !=0)
        !            41:                                printf("\n");
        !            42:                        exit(0);
        !            43:                } else if (isdigit(argv[1][1])) {
        !            44:                        signo = atoi(argv[1]+1);
        !            45:                        if (signo < 0 || signo > NSIG) {
        !            46:                                printf("kill: %s: number out of range\n",
        !            47:                                    argv[1]);
        !            48:                                exit(1);
        !            49:                        }
        !            50:                } else {
        !            51:                        char *name = argv[1]+1;
        !            52:                        for (signo = 1; signo <= NSIG; signo++)
        !            53:                                if (signm[signo] && (
        !            54:                                    !strcmp(signm[signo], name)||
        !            55:                                    !strcmp(signm[signo]+3, name)))
        !            56:                                        goto foundsig;
        !            57:                        printf("kill: %s: unknown signal; kill -l lists signals\n", name);
        !            58:                        exit(1);
        !            59: foundsig:
        !            60:                        ;
        !            61:                }
        !            62:                argc--;
        !            63:                argv++;
        !            64:        } else
        !            65:                signo = SIGTERM;
        !            66:        argv++;
        !            67:        while (argc > 1) {
        !            68:                if ((**argv<'0' || **argv>'9') && **argv!='-')
        !            69:                        goto usage;
        !            70:                res = kill(pid = atoi(*argv), signo);
        !            71:                if (res<0) {
        !            72:                        printf("%u: %s\n", pid, sys_errlist[errno]);
        !            73:                        errlev = 1;
        !            74:                }
        !            75:                argc--;
        !            76:                argv++;
        !            77:        }
        !            78:        return(errlev);
        !            79: }

unix.superglobalmegacorp.com

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