信号的产生有3种方式:
(1)通过终端快捷键产生信号(比如Ctrl+c,Ctrl+\等);
(2)调用系统函数向进程发送信号(kill() ,raise(),abort());
(3)由软件条件产生信号(alarm(),SIGALRM);
下面我们详细介绍(2)调用系统函数向进程发送信号:
kill():向指定进程发送信号
int kill(pid_t pid,int sig)
进程一:
int main()
{
while(1)
{
printf("pid:%d\n",getpid());
sleep(1);
}
return 0;
}
进程二:
int main(int argc,char*argv[])
{
int id = atoi(argv[1]);
int sig = atoi(argv[1]);
kill(id,sig);
return 0;
}
进程一是个死循环,当他运行的时候获得它的进程id,通过进程二,给它发送SIGKILL信号终止进程,结果如图:
raise():进程向自己发送信号
int raise(int sig);
int main(int argc,char*argv[])
{
raise(sig);
return 0;
}
执行程序时,调用raise()函数向进程自己发送SIGKILL信号来终止进程
结果如图:
abort():向进程发送ABORT信号
void abord(void)l;
int main(int argc,char*argv[])
{
printf("hello word\n");
abort();
return 0;
}
结果如图: