Files
oldlinux-files/bin-src/kill.c
2024-02-19 00:21:55 -05:00

97 lines
1.9 KiB
C

/* kill.c : copyright (92) Peter MacDonald: Distribute freely, don't restrict*/
#include <sys/types.h>
#include <signal.h>
#include <strings.h>
#define ERR 2
const char *usagestr = "usage: kill [-signal] pid ...\n";
void oops(void)
{ write(ERR,usagestr,strlen(usagestr));
exit(1);
}
void oops2(char *str1, char *str2)
{
write(ERR,str1,strlen(str1));
write(ERR,str2,strlen(str2));
write(ERR,"\n",1);
exit(1);
}
char *itoa(int num)
{ int sign = 0;
static char buf[15];
char *cp = buf+sizeof(buf)-1;
if (num<0)
{ sign = 1;
num = -num;
}
do
{
*cp-- = '0'+num%10;
num /= 10;
} while (num);
if (sign)
*cp-- = '-';
return(cp+1);
}
const char *signames[] = {
"HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "UNUSED",
"FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM",
"STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", 0 };
int main(int argc, char *argv[])
{
int i, signum = SIGTERM;
if (argc < 2)
oops();
if ((argc>1) && ('-' == *argv[1]))
{
if ('?' == argv[1][1])
for (i=0; i<NSIG; i++)
if (!signames[i])
{ write(ERR,"\n",1);
exit(0);
}
else
{ write(ERR,signames[i],strlen(signames[i]));
write(ERR," ", 1);
if (i==10)
write(ERR,"\n",1);
}
for (i=0; i<NSIG; i++)
if (!signames[i])
{ i = NSIG;
break;
}
else
if (!strcmp(signames[i],argv[1]+1))
break;
if (i < NSIG)
signum = i+1;
else
if ((!(signum = atoi(argv[1]+1))) || (signum<=0) || (signum>NSIG))
oops();
argc--;
argv++;
}
while (--argc)
{
argv++;
if ((i = atoi(*argv)) <= 3)
oops();
if (kill(i,signum))
oops2( "kill: no such process ", itoa(i));
}
return(0);
}