]> git.lizzy.rs Git - plan9front.git/blob - sys/src/ape/cmd/kill.c
ape: initialize _tos and use _tos->pid for getpid()
[plan9front.git] / sys / src / ape / cmd / kill.c
1 #include <stdlib.h>
2 #include <sys/types.h>
3 #include <unistd.h>
4 #include <signal.h>
5 #include <ctype.h>
6 #include <stdio.h>
7 #include <string.h>
8
9 #define NSIG SIGUSR2
10
11 char *signm[NSIG+1] = { 0,
12 "SIGHUP", "SIGINT", "SIGQUIT", "SIGILL", "SIGABRT", "SIGFPE", "SIGKILL", /* 1-7 */
13 "SIGSEGV", "SIGPIPE", "SIGALRM", "SIGTERM", "SIGUR1", "SIGUSR2", /* 8-13 */
14 };
15
16 main(int argc, char **argv)
17 {
18         int signo, pid, res;
19         int errlev;
20
21         errlev = 0;
22         if (argc <= 1) {
23         usage:
24                 fprintf(stderr, "usage: kill [ -sig ] pid ...\n");
25                 fprintf(stderr, "for a list of signals: kill -l\n");
26                 exit(2);
27         }
28         if (*argv[1] == '-') {
29                 if (argv[1][1] == 'l') {
30                         int i = 0;
31                         for (signo = 1; signo <= NSIG; signo++)
32                                 if (signm[signo]) {
33                                         printf("%s ", signm[signo]);
34                                         if (++i%8 == 0)
35                                                 printf("\n");
36                                 }
37                         if(i%8 !=0)
38                                 printf("\n");
39                         exit(0);
40                 } else if (isdigit(argv[1][1])) {
41                         signo = atoi(argv[1]+1);
42                         if (signo < 0 || signo > NSIG) {
43                                 fprintf(stderr, "kill: %s: number out of range\n",
44                                     argv[1]);
45                                 exit(1);
46                         }
47                 } else {
48                         char *name = argv[1]+1;
49                         for (signo = 1; signo <= NSIG; signo++)
50                                 if (signm[signo] && (
51                                     !strcmp(signm[signo], name)||
52                                     !strcmp(signm[signo]+3, name)))
53                                         goto foundsig;
54                         fprintf(stderr, "kill: %s: unknown signal; kill -l lists signals\n", name);
55                         exit(1);
56 foundsig:
57                         ;
58                 }
59                 argc--;
60                 argv++;
61         } else
62                 signo = SIGTERM;
63         argv++;
64         while (argc > 1) {
65                 if ((**argv<'0' || **argv>'9') && **argv!='-')
66                         goto usage;
67                 res = kill(pid = atoi(*argv), signo);
68                 if (res<0) {
69                         perror("kill");
70                 }
71                 argc--;
72                 argv++;
73         }
74         return(errlev);
75 }