Commit | Line | Data |
---|---|---|
e3207616 | 1 | static char *sccsid = "@(#)kill.c 4.3 (Berkeley) %G%"; |
5d41551c BJ |
2 | /* |
3 | * kill - send signal to process | |
4 | */ | |
5 | ||
6 | #include <signal.h> | |
f1c5de9d BJ |
7 | #include <ctype.h> |
8 | ||
9 | char *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 | |
16 | main(argc, argv) | |
17 | char **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); | |
55 | foundsig: | |
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 | } |