Linux 操作系统&信号

本文详细介绍了Unix/Linux系统中的信号概念、信号在进程间通信中的应用,包括kill、raise、alarm、pause和signal等API的使用方法,以及特殊信号如SIGKILL、SIGALRM等的特性。
摘要由CSDN通过智能技术生成

目录

1、信号

1.1 进程间通信

1.2   信号的概念

1.3 信号相关API

1.3.1kill  --  给某一个进程发送信号

1.3.2  raise  --  给自己发送信号

1.3.3  alarm

1.3.4  pause

1.3.5  signal


1、信号

1.1 进程间通信

信号,管道,IPC(进程间通信):共享内存,消息队列,信号量集

套接字  --  网络编程

线程----网络编程,数据库

1.2   信号的概念

属于一种软中断

查看信号:kill - I

62个信号

前31个属于不可靠信号

后31个属于可靠信号

ctrl  +  c  2号信号  --  杀死进程

ctrl  +  \  3号信号  --  杀死进程

9号信号  --  杀死进程

信号的产生:

用户:ctrl  +  c  ctrl  +  \   kill-sig PID 参数信号

内核:当我们的程序出现一些错误的时候,比如段错误,内核会给我们的进程发生杀死当前进程的信号。

程序:通过函数发送信号:kill

1.3 信号相关API

1.3.1kill  --  给某一个进程发送信号

头文件:

#include <sys/types.h>

 #include <signal.h>

函数原型:int kill(pid_t pid, int sig);

形参:pid  --  给那个进程发送信号

           sig--  信号(可以写序号,也可以写后面的宏定义)

           返回值:成功返回0,失败返回-1

特殊信号:

          9  --  SIGKILL  --  杀死进程,不可以被忽略或者改造;

        14  --  SIGALRM  --  闹钟信号,杀死进程

        17  --  SIGCHLD  --  只要子进程状态发生改变,父进程就能接收到该信号

        18  --  SIGCONT --  恢复被19号暂停的进程

        19  --  SIGSTOP  --  暂停进程

1.3.2  raise  --  给自己发送信号

头文件:

         #include <signal.h>

函数原型:int raise(int sig);

等价于:kill(getpid(),sig)

1.3.3  alarm

头文件:#include <unistd.h>

函数原型:unsigned int alarm(unsigned int seconds);
形参:seconds  秒数

功能:设置闹钟,闹钟时间到,产生闹钟信号,闹钟信号,可以杀死当前进程。

如果在该alarm之前,已经设置过闹钟,此时闹钟会更新

返回值:如果上一次设置的有闹钟,返回上一个闹钟的剩余时间,否则返回0;

1.3.4  pause

只要运行,就阻塞,直到一个信号产生,才会解除阻塞。

头文件:#include <unistd.h>

函数原型:int pause(void);

1.3.5  signal

信号处理函数

头文件:#include <signal.h>

函数原型:

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

形参:signum  --  要处理的信号

           handler  --  SIG_DFL  --  默认处理

                         --  SIG_IGN  --  忽略处理

                         --  函数指针  --  捕获到该信号,执行函数指针对应的函数

具体用法:signal(2,SIG_DFL);默认处理

                  signal   (2,SIG_IGN);        忽略处理

                  signal(信号,FUN);        捕捉到信号,执行Fun函数

注意:9号,19号,不允许被忽略,也不允许被改造

补充:

atexit: 注册退出清理函数
头文件:#include <stdlib.h>
函数原型:int atexit(void (*function)(void));
形参: 函数指针
void Clean(void)
{
printf(“%s 被运行\n”,__FUNCTION__);
}

int main()
{
atexit(Clean);//注册退出清理函数, 在 main 函数退出的时候, 直到自动运行 Clean 函数
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值