📄 kill.c
字号:
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <ctype.h>
int main(int argc,char *argv[])
{
int i,j = 0,k = 1,m = 14;
char sig[34][10] = {"SIGHUP","SIGINT","SIGQUIT","SIGILL","SIGTRAP","SIGABRT","SIGBUS","SIGFPE","SIGKILL","SIGUSR1","SIGSEGV","SIGUSR2","SIGPIPE","SIGALRM","SIGTERM"," ","SIGCHLD","SIGCONT","SIGSTOP","SIGTSTP","SIGTTIN","SIGTTOU","SIGURG","SIGXCPU","SIGXFSZ","SIGVTALRM","SIGPROF","SIGWINCH","SIGIO","SIGPWR","SIGSYS"," ","SIGRTMIN","SIGRTMAX"};
char str_signo[5],str_ad_signo[5];
int signo,ad_signo;
char str_pid[10];
char str_signal[10];
pid_t pid;
if(argc < 2)
{
printf("kill:usage:kill -signo pid or kill -l [signo|sigspec]\n");
exit(0);
}
else if(argc == 2)
{
if(strcmp(argv[1],"-l") == 0)
{
loop:for(i = 0;i < 33;i++)
{
if(strcmp(sig[i]," ") == 0)
continue;
if(j !=0&&j%4 == 0)
printf("\n");
j++;
printf("%2d) %-12s",i+1,sig[i]);
}
for(i=33;i < 62;i++)
{
if(j%4 == 0)
printf("\n");
j++;
if(k <=15)
{
printf("%2d) %s+%-3d",i+1,sig[32],k);
k++;
}
else
{
printf("%2d) %s-%-3d",i+1,sig[33],m);
m--;
}
}
printf("\n");
printf("63) %-12s",sig[33]);
printf("\n");
}
else
{
printf("kill:usage:kill -signo pid or kill -l [signo|sigspec]\n");
exit(0);
}
}
else if(strcmp(argv[1],"-l") == 0)
{
for(i = 0;i< 33;i++)
{
if(strcmp(argv[2],sig[i]) == 0)
{
printf("%d\n",i + 1);
exit(0);
}
}
if(strstr(argv[2],"SIGRTMIN+") != 0)
{
strcpy(str_ad_signo,&argv[2][9]);
ad_signo = atoi(str_ad_signo);
printf("%d\n",ad_signo + 33);
exit(0);
}
if(strstr(argv[2],"SIGRTMAX-") != 0)
{
strcpy(str_ad_signo,&argv[2][9]);
ad_signo = atoi(str_ad_signo);
printf("%d\n",63 - ad_signo);
exit(0);
}
for(i = 0;argv[2][i] != '\0';i++)
if(!isdigit(argv[2][i]))
goto err;
strcpy(str_signo,argv[2]);
signo = atoi(str_signo);
if(signo < 34)
printf("%s\n",&sig[signo - 1][3]);
else if(signo < 49)
printf("%s+%d\n",&sig[32][3],signo - 33);
else if(signo < 63)
printf("%s-%d\n",&sig[33][3],63 - signo);
else if(signo == 63)
printf("%s\n",&sig[33][3]);
else
err:printf("-wsh: kill: %s: invalid signal specfication!\n",argv[2]);
}
else
{
for(i = 0;i< 33;i++)
{
if(strcmp(&argv[1][1],sig[i]) == 0)
{
signo = i + 1;
goto kl;
}
}
if(strstr(&argv[1][1],"SIGRTMIN+") != 0)
{
strcpy(str_ad_signo,&argv[2][9]);
ad_signo = atoi(str_ad_signo);
signo = 33 + ad_signo;
goto kl;
}
if(strstr(&argv[1][1],"SIGRTMAX-") != 0)
{
strcpy(str_ad_signo,&argv[2][9]);
ad_signo = atoi(str_ad_signo);
signo = 63 - ad_signo;
goto kl;
}
for(i = 1;argv[1][i] != 0;i++)
if(!isdigit(argv[1][i]))
{
printf("-wsh: kill: %s: invalid signal specfication!\n",&argv[1][1]);
exit(0);
}
strcpy(str_signo,&argv[1][1]);
signo = atoi(str_signo);
kl:for(i = 0;argv[2][i] != 0;i++)
if(!isdigit(argv[2][i]))
{
printf("-wsh: kill: %s: No such pid!\n",argv[2]);
exit(0);
}
strcpy(str_pid,argv[2]);
pid = atoi(str_pid);
if(kill(pid,signo) < 0)
{
perror("");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -