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