sbase

suckless unix tools
git clone git://git.2f30.org/sbase.git
Log | Files | Refs | README | LICENSE

commit e180a911724f518a08904d74f9f3102727acbfb7
parent 8d087ae4fbc9fa2da784e4e4f54ef153f512a68c
Author: Connor Lane Smith <cls@lubutu.com>
Date:   Fri Jun 10 02:29:10 +0100

add kill, thanks rob
Diffstat:
Makefile | 1+
kill.1 | 18++++++++++++++++++
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; +}