进程信号:
原理:是一种中断机制,或者说是一种事件通知机制,在这里讲的是软件中断,通过信号通知进程发生了某个事件,打断进程当前的操作,去处理事件。
一个信号对应一个事件,并且信号必须能够被识别
Linux下信号种类:
使用kill -l命令进行查看,62种
1~31号:非可靠信号;34-64号:可靠信号
信号的生命周期:产生,注册,注销,处理
产生:
硬件产生: ctrl+c,ctrl+\,ctrl+z
软件产生: kill命令发送一个信号给进程;示例: kill -sigid pid
kill杀死进程的原理
是给进程发送了一个终止信号,进程处理信号的方式就是退出进程
int kill(pid_t pid, int sig); 给指定进程发送指定信号
int raise(int sig); 给调用进程发送指定信号
unsigned int alarm(unsigned int seconds); 设置定时器
void abort(void);
#include<stdio.h>
#include<unistd.h> //getpid sleep
#include<stdlib.h> //SIGINT
#include<signal.h> //kill
int main(int argc,char *argv[]) //运行参数个数 运行参数首地址
{
//int kill(int pid,int sig); //给指定信号发送指定信号
kill(getpid(),SIGINT); //getpid:获取自身pid kill:给自身进程发送一个终止信号
while(1){
printf("今天你开心吗\n");
sleep(1);
}
return 0;
}
#include<stdio.h>
#include<unistd.h> //getpid sleep
#include<stdlib.h> //SIGINT
#include<signal.h> //kill
int main(int argc,char *argv[]) //运行参数个数 运行参数首地址
{
//int kill(int pid,int sig); //给指定信号发送指定信号
//kill(getpid(),SIGINT); //getpid:获取自身pid kill:给自身进程发送一个终止信号
raise(SIGINT); //给调用进程发送指定信号
while(1){
printf("今天你开心吗\n");
sleep(1);
}
return 0;
}
#include<stdio.h>
#include<unistd.h> //getpid sleep
#include<stdlib.h> //SIGINT
#include<signal.h> //kill
int main(int argc,char *argv[]) //运行参数个数 运行参数首地址
{
//int kill(int pid,int sig); //给指定信号发送指定信号
//kill(getpid(),SIGINT); //getpid:获取自身pid kill:给自身进程发送一个终止信号
//raise(SIGINT); //给调用进程发送指定信号
alarm(4); //定时器
while(1){
printf("今天你开心吗\n");
sleep(1);
}
return 0;
}
#include<stdio.h>
#include<unistd.h> //getpid sleep
#include<stdlib.h> //SIGINT
#include<signal.h> //kill
int main(int argc,char *argv[]) //运行参数个数 运行参数首地址
{
//int kill(int pid,int sig); //给指定信号发送指定信号
//kill(getpid(),SIGINT); //getpid:获取自身pid kill:给自身进程发送一个终止信号
//raise(SIGINT); //给调用进程发送指定信号
//alarm(4); //定时器
abort();
while(1){
printf("今天你开心吗\n");
sleep(1);
}
return 0;
}