commit e180a911724f518a08904d74f9f3102727acbfb7
parent 8d087ae4fbc9fa2da784e4e4f54ef153f512a68c
Author: Connor Lane Smith <cls@lubutu.com>
Date: Fri, 10 Jun 2011 02:29:10 +0100
add kill, thanks rob
Diffstat:
M | Makefile | | | 1 | + |
A | kill.1 | | | 18 | ++++++++++++++++++ |
A | kill.c | | | 50 | ++++++++++++++++++++++++++++++++++++++++++++++++++ |
3 files changed, 69 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
@@ -22,6 +22,7 @@ SRC = \
fold.c \
grep.c \
head.c \
+ kill.c \
ln.c \
ls.c \
mkdir.c \
diff --git a/kill.1 b/kill.1
@@ -0,0 +1,18 @@
+.TH KILL 1 sbase\-VERSION
+.SH NAME
+KILL \- compare two files
+.SH SYNOPSIS
+.B kill
+.RB [ \-s ]
+.RI [ pid ...]
+.SH DESCRIPTION
+.B kill
+sends a
+.I TERM
+signal to the given processes.
+.SH OPTIONS
+.TP
+.BI \-s " signal"
+sends the named signal.
+.SH SEE ALSO
+.IR kill (2)
diff --git a/kill.c b/kill.c
@@ -0,0 +1,50 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdlib.h>
+#include <signal.h>
+#include <strings.h>
+#include <unistd.h>
+#include "util.h"
+
+#define LEN(x) (sizeof (x) / sizeof *(x))
+
+struct {
+ const char *name;
+ int sig;
+} sigs[] = {
+#define SIG(n) { #n, SIG##n }
+ SIG(ABRT), SIG(ALRM), SIG(BUS), SIG(CHLD), SIG(CONT), SIG(FPE), SIG(HUP),
+ SIG(ILL), SIG(INT), SIG(KILL), SIG(PIPE), SIG(QUIT), SIG(SEGV), SIG(STOP),
+ SIG(TERM), SIG(TSTP), SIG(TTIN), SIG(TTOU), SIG(USR1), SIG(USR2), SIG(URG),
+#undef SIG
+};
+
+int
+main(int argc, char *argv[])
+{
+ char c, *end;
+ int i, sig = SIGTERM;
+ pid_t pid;
+
+ while((c = getopt(argc, argv, "s:")) != -1)
+ switch(c) {
+ case 's':
+ for(i = 0; i < LEN(sigs); i++)
+ if(!strcasecmp(optarg, sigs[i].name)) {
+ sig = sigs[i].sig;
+ break;
+ }
+ if(i == LEN(sigs))
+ eprintf("%s: unknown signal\n", optarg);
+ break;
+ default:
+ exit(EXIT_FAILURE);
+ }
+ for(; optind < argc; optind++) {
+ pid = strtol(argv[optind], &end, 0);
+ if(*end != '\0')
+ eprintf("%s: not a number\n", argv[optind]);
+ if(kill(pid, sig) == -1)
+ eprintf("kill %d:", pid);
+ }
+ return EXIT_SUCCESS;
+}