BSD 4 release
[unix-history] / usr / src / cmd / kill.c
CommitLineData
31cef89c 1static char *sccsid = "@(#)kill.c 4.2 (Berkeley) 10/9/80";
5d41551c
BJ
2/*
3 * kill - send signal to process
4 */
5
6#include <signal.h>
f1c5de9d
BJ
7#include <ctype.h>
8
9char *signm[] = { 0,
10"HUP", "INT", "QUIT", "ILL", "TRAP", "IOT", "EMT", "FPE", /* 1-8 */
11"KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", 0, /* 9-16 */
12"STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "TINT", "XCPU", /* 17-24 */
13"XFSZ", 0, 0, 0, 0, 0, 0, 0, /* 25-31 */
14};
5d41551c
BJ
15
16main(argc, argv)
17char **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:
f1c5de9d
BJ
27 printf("usage: kill [ -sig ] pid ...\n");
28 printf("for a list of signals: kill -l\n");
5d41551c
BJ
29 exit(2);
30 }
31 if (*argv[1] == '-') {
f1c5de9d
BJ
32 if (argv[1][1] == 'l') {
33 for (signo = 1; signo <= NSIG; signo++) {
34 if (signm[signo])
35 printf("%s ", signm[signo]);
36 if (signo == 16)
37 printf("\n");
38 }
39 printf("\n");
40 exit(0);
41 } else if (isdigit(argv[1][1])) {
42 signo = atoi(argv[1]+1);
43 if (signo < 1 || signo > NSIG) {
44 printf("kill: %s: number out of range\n",
45 argv[1]);
46 exit(1);
47 }
48 } else {
49 char *name = argv[1]+1;
50 for (signo = 1; signo <= NSIG; signo++)
51 if (signm[signo] && !strcmp(signm[signo], name))
52 goto foundsig;
53 printf("kill: %s: unknown signal; kill -l lists signals\n", name);
54 exit(1);
55foundsig:
56 ;
57 }
5d41551c
BJ
58 argc--;
59 argv++;
60 } else
61 signo = SIGTERM;
62 argv++;
63 while (argc > 1) {
64 if (**argv<'0' || **argv>'9')
65 goto usage;
66 res = kill(pid = atoi(*argv), signo);
67 if (res<0) {
68 printf("%u: %s\n", pid, sys_errlist[errno]);
69 errlev = 1;
70 }
71 argc--;
72 argv++;
73 }
74 return(errlev);
75}