OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / user / sysutils / kill.c
1 /* kill.c
2  *
3  * Copyright (c) 1993 by David I. Bell
4  * Copyright (C) 1999, Rt-Control Inc.
5  * Copyright (C) 2000  Lineo, Inc.  (www.lineo.com) 
6  *
7  * Permission is granted to use, distribute, or modify this source,
8  * provided that this copyright notice remains intact.
9  *
10  */
11  
12 #include <sys/types.h>
13 #include <sys/stat.h>
14 #include <sys/time.h>
15 #include <string.h>
16 #include <unistd.h>
17 #include <fcntl.h>
18 #include <signal.h>
19 #include <pwd.h>
20 #include <grp.h>
21 #include <utime.h>
22 #include <errno.h> 
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #include <ctype.h>
27
28 #ifndef isdecimal
29 #define isdecimal(X) ((X) >= '0' && (X) <= '9' ? 1 : 0)
30 #endif
31
32 int
33 main(argc, argv)
34         char    **argv;
35 {
36         char    *cp;
37         int     sig;
38         int     pid;
39
40         sig = SIGTERM;
41
42         if (argv[1][0] == '-') {
43                 cp = &argv[1][1];
44                 if (strcmp(cp, "HUP") == 0)
45                         sig = SIGHUP;
46                 else if (strcmp(cp, "INT") == 0)
47                         sig = SIGINT;
48                 else if (strcmp(cp, "QUIT") == 0)
49                         sig = SIGQUIT;
50                 else if (strcmp(cp, "ILL") == 0)
51                         sig = SIGILL;
52                 else if (strcmp(cp, "TRAP") == 0)
53                         sig = SIGTRAP;
54                 else if (strcmp(cp, "ABRT") == 0)
55                         sig = SIGABRT;
56                 else if (strcmp(cp, "IOT") == 0)
57                         sig = SIGIOT;
58                 else if (strcmp(cp, "BUS") == 0)
59                         sig = SIGBUS;
60                 else if (strcmp(cp, "FPE") == 0)
61                         sig = SIGFPE;
62                 else if (strcmp(cp, "KILL") == 0)
63                         sig = SIGKILL;
64                 else if (strcmp(cp, "USR1") == 0)
65                         sig = SIGUSR1;
66                 else if (strcmp(cp, "SEGV") == 0)
67                         sig = SIGSEGV;
68                 else if (strcmp(cp, "USR2") == 0)
69                         sig = SIGUSR2;
70                 else if (strcmp(cp, "PIPE") == 0)
71                         sig = SIGPIPE;
72                 else if (strcmp(cp, "ALRM") == 0)
73                         sig = SIGALRM;
74                 else if (strcmp(cp, "TERM") == 0)
75                         sig = SIGTERM;
76                 else if (strcmp(cp, "STKFLT") == 0)
77                         sig = SIGSTKFLT;
78                 else if (strcmp(cp, "CHLD") == 0)
79                         sig = SIGCHLD;
80                 else if (strcmp(cp, "CONT") == 0)
81                         sig = SIGCONT;
82                 else if (strcmp(cp, "STOP") == 0)
83                         sig = SIGSTOP;
84                 else if (strcmp(cp, "TSTP") == 0)
85                         sig = SIGTSTP;
86                 else if (strcmp(cp, "TTIN") == 0)
87                         sig = SIGTTIN;
88                 else if (strcmp(cp, "TTOU") == 0)
89                         sig = SIGTTOU;
90                 else if (strcmp(cp, "URG") == 0)
91                         sig = SIGURG;
92                 else if (strcmp(cp, "PWR") == 0)
93                         sig = SIGPWR;
94                 else {
95                         sig = 0;
96                         while (isdecimal(*cp))
97                                 sig = sig * 10 + *cp++ - '0';
98
99                         if (*cp) {
100                                 write(2, "Unknown signal\n", strlen("Unknown signal\n"));
101                                 exit(1);
102                         }
103                 }
104                 argc--;
105                 argv++;
106         }
107
108         while (argc-- > 1) {
109                 cp = *++argv;
110                 pid = 0;
111                 while (isdecimal(*cp))
112                         pid = pid * 10 + *cp++ - '0';
113
114                 if (*cp) {
115                         write(2, "Non-numeric pid\n", strlen("Non-numeric pid\n"));
116                         exit(1);
117                 }
118
119                 if (kill(pid, sig) < 0)
120                         perror(*argv);
121         }
122         return 0;
123 }