k9core

Coreutils for *nix operating systems [fork]
git clone git://bvnf.space/k9core.git
Log | Files | Refs | LICENSE

kill.c (1708B)


      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;
}