1*1363Sbill static char *sccsid = "@(#)kill.c 4.2 (Berkeley) 10/10/80"; 21033Sbill /* 31033Sbill * kill - send signal to process 41033Sbill */ 51033Sbill 61033Sbill #include <signal.h> 7*1363Sbill #include <ctype.h> 81033Sbill 9*1363Sbill char *signm[] = { 0, 10*1363Sbill "HUP", "INT", "QUIT", "ILL", "TRAP", "IOT", "EMT", "FPE", /* 1-8 */ 11*1363Sbill "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", 0, /* 9-16 */ 12*1363Sbill "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "TINT", "XCPU", /* 17-24 */ 13*1363Sbill "XFSZ", 0, 0, 0, 0, 0, 0, 0, /* 25-31 */ 14*1363Sbill }; 15*1363Sbill 161033Sbill main(argc, argv) 171033Sbill char **argv; 181033Sbill { 191033Sbill register signo, pid, res; 201033Sbill int errlev; 211033Sbill extern char *sys_errlist[]; 221033Sbill extern errno; 231033Sbill 241033Sbill errlev = 0; 251033Sbill if (argc <= 1) { 261033Sbill usage: 27*1363Sbill printf("usage: kill [ -sig ] pid ...\n"); 28*1363Sbill printf("for a list of signals: kill -l\n"); 291033Sbill exit(2); 301033Sbill } 311033Sbill if (*argv[1] == '-') { 32*1363Sbill if (argv[1][1] == 'l') { 33*1363Sbill for (signo = 1; signo <= NSIG; signo++) { 34*1363Sbill if (signm[signo]) 35*1363Sbill printf("%s ", signm[signo]); 36*1363Sbill if (signo == 16) 37*1363Sbill printf("\n"); 38*1363Sbill } 39*1363Sbill printf("\n"); 40*1363Sbill exit(0); 41*1363Sbill } else if (isdigit(argv[1][1])) { 42*1363Sbill signo = atoi(argv[1]+1); 43*1363Sbill if (signo < 1 || signo > NSIG) { 44*1363Sbill printf("kill: %s: number out of range\n", 45*1363Sbill argv[1]); 46*1363Sbill exit(1); 47*1363Sbill } 48*1363Sbill } else { 49*1363Sbill char *name = argv[1]+1; 50*1363Sbill for (signo = 1; signo <= NSIG; signo++) 51*1363Sbill if (signm[signo] && !strcmp(signm[signo], name)) 52*1363Sbill goto foundsig; 53*1363Sbill printf("kill: %s: unknown signal; kill -l lists signals\n", name); 54*1363Sbill exit(1); 55*1363Sbill foundsig: 56*1363Sbill ; 57*1363Sbill } 581033Sbill argc--; 591033Sbill argv++; 601033Sbill } else 611033Sbill signo = SIGTERM; 621033Sbill argv++; 631033Sbill while (argc > 1) { 641033Sbill if (**argv<'0' || **argv>'9') 651033Sbill goto usage; 661033Sbill res = kill(pid = atoi(*argv), signo); 671033Sbill if (res<0) { 681033Sbill printf("%u: %s\n", pid, sys_errlist[errno]); 691033Sbill errlev = 1; 701033Sbill } 711033Sbill argc--; 721033Sbill argv++; 731033Sbill } 741033Sbill return(errlev); 751033Sbill } 76