|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.