file reorg, pathnames.h paths.h
[unix-history] / usr / src / bin / kill / kill.c
CommitLineData
5d41551c 1/*
8e7b7599
KB
2 * Copyright (c) 1988 Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
5d41551c
BJ
16 */
17
8e7b7599
KB
18#ifndef lint
19char copyright[] =
20"@(#) Copyright (c) 1988 Regents of the University of California.\n\
21 All rights reserved.\n";
22#endif /* not lint */
23
24#ifndef lint
25static char sccsid[] = "@(#)kill.c 4.5 (Berkeley) %G%";
26#endif /* not lint */
27
5d41551c 28#include <signal.h>
8e7b7599 29#include <stdio.h>
f1c5de9d
BJ
30#include <ctype.h>
31
8e7b7599
KB
32static char *signals[] = {
33 "hup", "int", "quit", "ill", "trap", "iot", /* 1 - 6 */
34 "emt", "fpe", "kill", "bus", "segv", "sys", /* 7 - 12 */
35 "pipe", "alrm", "term", "urg", "stop", "tstp", /* 13 - 18 */
36 "cont", "chld", "ttin", "ttou", "io", "xcpu", /* 19 - 24 */
37 "xfsz", "vtalrm", "prof", "winch", "29", "usr1", /* 25 - 30 */
38 "usr2", NULL, /* 31 - 32 */
39 };
5d41551c
BJ
40
41main(argc, argv)
8e7b7599
KB
42 int argc;
43 char **argv;
5d41551c 44{
8e7b7599
KB
45 register int numsig;
46 register char **p;
47 int errors;
48
49 if (argc < 2)
50 usage();
5d41551c 51
8e7b7599
KB
52 if (!strcmp(*++argv, "-l")) {
53 printsig();
54 exit(0);
5d41551c 55 }
8e7b7599
KB
56
57 numsig = SIGTERM;
58 if (**argv == '-') {
59 ++*argv;
60 if (isalpha(**argv)) {
61 if (!strncasecmp(*argv, "sig", 3))
62 *argv += 3;
63 for (p = signals;; ++p) {
64 if (!*p)
65 goto error;
66 if (!strcasecmp(*p, *argv)) {
67 numsig = p - signals + 1;
68 break;
69 }
f1c5de9d 70 }
8e7b7599
KB
71 }
72 else if (isdigit(**argv)) {
73 numsig = atoi(*argv);
74 if (numsig <= 0 || numsig > NSIG)
75 goto error;
76 }
77 else {
78error: printf("kill: unknown signal %s; valid signals:\n", *argv);
79 printsig();
f1c5de9d 80 exit(1);
f1c5de9d 81 }
8e7b7599
KB
82 ++argv;
83 }
84
85 if (!*argv)
86 usage();
87
88 for (errors = 0; *argv; ++argv) {
89 if (!isdigit(**argv))
90 usage();
91 if (kill(atoi(*argv), numsig) == -1) {
92 perror(*argv);
93 errors = 1;
5d41551c 94 }
5d41551c 95 }
8e7b7599
KB
96 exit(errors);
97}
98
99static
100printsig()
101{
102 register char **p;
103
104 for (p = signals; *p; ++p) {
105 printf("%s ", *p);
106 if ((p - signals) == NSIG / 2 - 1)
107 printf("\n");
108 }
109 printf("\n");
110}
111
112static
113usage()
114{
115 printf("usage: kill [-l] [-sig] pid ...\n");
116 exit(2);
5d41551c 117}