Mercurial > hg > toybox
annotate toys/kill.c @ 490:96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
author | Daniel Walter <d.walter@0x90.at> |
---|---|
date | Tue, 21 Feb 2012 19:45:19 -0600 |
parents | |
children | c9aaceccd6bd |
rev | line source |
---|---|
490
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
1 /* vi: set sw=4 ts=4: |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
2 * |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
3 * kill.c - a program to send signals to processes |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
4 * |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
5 * Copyright 2012 Daniel Walter <d.walter@0x90.at> |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
6 * |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
7 * See http://opengroup.org/onlinepubs/9699919799/utilities/kill.html |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
8 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
9 USE_KILL(NEWTOY(kill, NULL, TOYFLAG_BIN)) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
10 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
11 config KILL |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
12 bool "kill" |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
13 default y |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
14 help |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
15 usage: kill [-l signal_number | -s signal_name | -signal_name | -signal_number] pid... |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
16 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
17 Send a signal to a process |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
18 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
19 */ |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
20 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
21 #include "toys.h" |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
22 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
23 #define TT this.kill |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
24 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
25 typedef struct { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
26 int signum; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
27 char *signame; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
28 } signals_t; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
29 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
30 const signals_t signals[] = { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
31 { 1, "HUP"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
32 { 2, "INT"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
33 { 3, "QUIT"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
34 { 4, "ILL"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
35 { 5, "TRAP"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
36 { 6, "ABRT"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
37 { 7, "BUS"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
38 { 8, "FPE"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
39 { 9, "KILL"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
40 { 10, "USR1"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
41 { 11, "SEGV"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
42 { 12, "USR2"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
43 { 13, "PIPE"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
44 { 14, "ALRM"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
45 { 15, "TERM"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
46 { 16, "STKFLT"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
47 { 17, "CHLD"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
48 { 18, "CONT"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
49 { 19, "STOP"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
50 { 20, "TSTP"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
51 { 21, "TTIN"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
52 { 22, "TTOU"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
53 { 23, "URG"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
54 { 24, "XCPU"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
55 { 25, "XFSZ"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
56 { 26, "VTALRM"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
57 { 27, "PROF"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
58 { 28, "WINCH"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
59 { 29, "POLL"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
60 { 30, "PWR"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
61 { 31, "SYS"}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
62 /* terminator */ |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
63 { -1, NULL}, |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
64 }; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
65 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
66 static char* signum_to_signame(int sig) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
67 { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
68 int i = 0; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
69 for (;;) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
70 if (signals[i].signum == sig) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
71 return signals[i].signame; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
72 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
73 if (signals[++i].signum == -1) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
74 break; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
75 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
76 return NULL; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
77 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
78 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
79 static int signame_to_signum(char *signame) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
80 { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
81 int i=0; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
82 for (;;) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
83 if (!strcmp(signals[i].signame, signame)) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
84 return signals[i].signum; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
85 if (signals[++i].signum == -1) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
86 break; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
87 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
88 return -1; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
89 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
90 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
91 static int send_signal(int sig, pid_t pid) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
92 { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
93 if (kill(pid, sig) < 0) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
94 perror("kill"); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
95 return -1; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
96 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
97 return 0; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
98 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
99 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
100 static void list_all_signals() |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
101 { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
102 int i = 0; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
103 for (;;) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
104 printf("%s ", signals[i++].signame); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
105 if (i % 16 == 0) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
106 printf("\n"); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
107 if (signals[i].signum == -1) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
108 break; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
109 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
110 printf("\n"); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
111 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
112 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
113 static int list_signal(int signum) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
114 { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
115 char *signam = signum_to_signame(signum); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
116 if (signam) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
117 printf("%s\n", signam); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
118 return 0; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
119 } else { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
120 printf("Unknown signal %d\n", signum); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
121 return -1; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
122 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
123 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
124 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
125 static int list_signal_by_name(char *signame) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
126 { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
127 int signum = signame_to_signum(signame); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
128 if (signum > 0) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
129 printf("%d\n", signum); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
130 return 0; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
131 } else { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
132 printf("Unknown signal %s\n", signame); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
133 return -1; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
134 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
135 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
136 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
137 void kill_main(void) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
138 { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
139 int signum = 0; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
140 int have_signal = 0; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
141 char *signame, *tmp; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
142 pid_t pid; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
143 while (*toys.optargs) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
144 char *arg = *(toys.optargs++); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
145 if (arg[0] == '-' && !have_signal) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
146 arg++; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
147 switch(arg[0]) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
148 case 'l': |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
149 if (!*toys.optargs) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
150 list_all_signals(); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
151 else { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
152 signum = strtol(*(toys.optargs), &signame, 10); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
153 if (signame == *(toys.optargs)) |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
154 list_signal_by_name(signame); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
155 else |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
156 list_signal(signum); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
157 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
158 return; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
159 case 's': |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
160 arg = *(toys.optargs++); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
161 default: |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
162 signum = strtol(arg, &signame, 10); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
163 if (signame == arg) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
164 signum = signame_to_signum(signame); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
165 if (signum < 0) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
166 toys.exitval = EXIT_FAILURE; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
167 return; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
168 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
169 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
170 have_signal = 1; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
171 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
172 } else { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
173 /* pids */ |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
174 pid = strtol(arg, &tmp, 10); |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
175 if (tmp == arg) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
176 toys.exitval = EXIT_FAILURE; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
177 return; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
178 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
179 if (send_signal(signum, pid) < 0) { |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
180 toys.exitval = EXIT_FAILURE; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
181 return; |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
182 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
183 |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
184 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
185 } |
96a5e66a7dae
Add new kill toy. Used to send signals to a process or a process group.
Daniel Walter <d.walter@0x90.at>
parents:
diff
changeset
|
186 } |