信号的处理:
- 信号的处理有三种方法:忽略,捕捉,和默认动作。
- SIGKILL和SIGSTOP两种信号不能被忽略和捕捉。
捕捉信号:执行自定义动作
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
信号 函数
忽略信号:
SIG_IGN
signal(SIGINT,SIG_IGN); //此信号被忽略
有关函数:
atoi函数:将字符串转换成整型数
sprintf函数:char cmd[128] = {0};
sprintf(cmd,"kill -%d %d",signum,pid); //将 kill -%d %d 写入到cmd中
system函数:system(cmd); //执行cmd中内容:"kill -%d %d"
信号捕捉:
void handler(int signum) //信号作为参数传递过来
{
printf("get num=%d\n",signum);
switch(signum){
case 2:
printf("SIGINT\n");
case 9:
printf("SIGKILL\n");
case 10:
printf("SIGUSR1\n");
}
}int main()
{
signal(SIGINT,handler);
signal(SIGKILL,handler);
signal(SIGUSR1,handler);while(1);
return 0;
}
运行程序杀死进程:
int main(int argc,char **argv)
{
int signum;
int pid;
char cmd[128] = {0};signum = atoi(argv[1]);
pid = atoi(argv[2]);printf("num = %d, pid = %d",signum,pid);
// kill(pid,signum);
sprintf(cmd,"kill -%d %d",signum,pid);
system(cmd);printf("send signal ok\n");
return 0;
}