1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void
list_signals(void)
{
puts("1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) "
"SIGTRAP");
puts("6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) "
"SIGUSR1");
puts("11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) "
"SIGTERM");
puts("16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) "
"SIGTSTP");
puts("21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) "
"SIGXFSZ");
puts("26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR");
puts("31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) "
"SIGRTMIN+3");
puts("38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) "
"SIGRTMIN+8");
puts("43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) "
"SIGRTMIN+12 47) SIGRTMIN+13");
puts("48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) "
"SIGRTMAX-13 52) SIGRTMAX-12");
puts("53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) "
"SIGRTMAX-8 57) SIGRTMAX-7");
puts("58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) "
"SIGRTMAX-2");
puts("63) SIGRTMAX-1 64) SIGRTMAX");
}
int
main(int argc, char *argv[])
{
int sig = 0;
pid_t pid;
if(argc == 1) {
fprintf(stderr, "usage: kill [signal_number] pid\n");
return 1;
}
if(argv[1][1] == 'l') {
list_signals();
return 0;
}
switch(argc) {
case 2:
sig = 15;
pid = atoi(argv[1]);
break;
case 3:
sig = abs(atoi(argv[1]));
pid = abs(atoi(argv[2]));
break;
default:
fprintf(stderr, "usage: kill [signal_number] pid\n");
return 1;
}
if(kill(pid, sig) == -1) {
fprintf(stderr, "kill: %i: %s\n", pid, strerror(errno));
return 1;
}
return 0;
}
|