1 /* 2 * Copyright (c) 1988 Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8 #ifndef lint 9 char copyright[] = 10 "@(#) Copyright (c) 1988 Regents of the University of California.\n\ 11 All rights reserved.\n"; 12 #endif /* not lint */ 13 14 #ifndef lint 15 static char sccsid[] = "@(#)kill.c 4.6 (Berkeley) 05/31/90"; 16 #endif /* not lint */ 17 18 #include <signal.h> 19 #include <stdio.h> 20 #include <ctype.h> 21 22 static char *signals[] = { 23 "hup", "int", "quit", "ill", "trap", "iot", /* 1 - 6 */ 24 "emt", "fpe", "kill", "bus", "segv", "sys", /* 7 - 12 */ 25 "pipe", "alrm", "term", "urg", "stop", "tstp", /* 13 - 18 */ 26 "cont", "chld", "ttin", "ttou", "io", "xcpu", /* 19 - 24 */ 27 "xfsz", "vtalrm", "prof", "winch", "29", "usr1", /* 25 - 30 */ 28 "usr2", NULL, /* 31 - 32 */ 29 }; 30 31 main(argc, argv) 32 int argc; 33 char **argv; 34 { 35 register int numsig; 36 register char **p; 37 int errors; 38 39 if (argc < 2) 40 usage(); 41 42 if (!strcmp(*++argv, "-l")) { 43 printsig(); 44 exit(0); 45 } 46 47 numsig = SIGTERM; 48 if (**argv == '-') { 49 ++*argv; 50 if (isalpha(**argv)) { 51 if (!strncasecmp(*argv, "sig", 3)) 52 *argv += 3; 53 for (p = signals;; ++p) { 54 if (!*p) 55 goto error; 56 if (!strcasecmp(*p, *argv)) { 57 numsig = p - signals + 1; 58 break; 59 } 60 } 61 } 62 else if (isdigit(**argv)) { 63 numsig = atoi(*argv); 64 if (numsig <= 0 || numsig > NSIG) 65 goto error; 66 } 67 else { 68 error: printf("kill: unknown signal %s; valid signals:\n", *argv); 69 printsig(); 70 exit(1); 71 } 72 ++argv; 73 } 74 75 if (!*argv) 76 usage(); 77 78 for (errors = 0; *argv; ++argv) { 79 if (!isdigit(**argv)) 80 usage(); 81 if (kill(atoi(*argv), numsig) == -1) { 82 perror(*argv); 83 errors = 1; 84 } 85 } 86 exit(errors); 87 } 88 89 static 90 printsig() 91 { 92 register char **p; 93 94 for (p = signals; *p; ++p) { 95 printf("%s ", *p); 96 if ((p - signals) == NSIG / 2 - 1) 97 printf("\n"); 98 } 99 printf("\n"); 100 } 101 102 static 103 usage() 104 { 105 printf("usage: kill [-l] [-sig] pid ...\n"); 106 exit(2); 107 } 108