1.信号处理之:kill(),alarm(),pause()函数

简介:  1查看信号的方式:man 7 signal,通过这个命令可以查看到所有信息。 2查看信号kill -l 注意,后面的32个信号表示的实时信号。   会发现一个规律,前32种信号会有各种不同的名称,后32种会以“SIGRTMIN”或者“SIGRTMAX”开头,前者是从unix继承下来的信号,称为不可靠信号(也称为非实时信号),后者为了解


1查看信号的方式:man 7 signal,通过这个命令可以查看到所有信息。

2查看信号kill -l

注意,后面的32个信号表示的实时信号。

 

会发现一个规律,前32种信号会有各种不同的名称,后32种会以“SIGRTMIN”或者“SIGRTMAX”开头,前者是从unix继承下来的信号,称为不可靠信号(也称为非实时信号),后者为了解决不可靠信号的问题进行了更改和扩充的信号形成了可靠信号(也称为实时信号)

如果想要了解可靠与不可靠信号,需要了解信号的生命周期:

一个完整的信号周期可以分为三个重要阶段,三个重要阶段有四个重要事件刻画的:信号产生,信号在进程中注册,信号在进程中注销,执行信号处理函数

相邻的两个事件的时间间隔构成了生命周期的一个阶段,这里的信号处理有多种方式,一般由内核完成,也可以由用户进程完成

3.man 7 signal

 

Signal dispositions

       Each signal has a current disposition,which determines how the process

       behaves when it is delivered the signal.

 

       The entries  in  the "Action"  column of thetables below specify the

       default disposition for each signal, asfollows:

       Term  Default action is to terminate the process.  表示终止当前线程

       Ign   Default action is to ignore the signal. 表示忽略该信号

       Core  Default action is to terminate the process and  dump core  (see

              core(5)). 表示终止当前进程并且Core Dump(Core Dump用于gdb调试)

       Stop  Default action is to stop the process. 表示停止当前进程

       Cont  Default  action  is to  continue the process if it iscurrently

              stopped. 表示继续执行先前停止的进程。

信号产生种类:

Ctrl+C   SIGINT

Ctrl+z   SIGTSTP

Ctrl+\   SIGQUIT

4.硬件异常

*0操作

*访问非法内存

int kill(pid_tpid,int sig)

   pid > 0

       sig发送给IDpid的进程

   pid < 0

       sig发送给组ID|pid|的进程,并且发送进程具有向其发送信号的权限

   pid == -1

       sig发送给发送进程有权限向他们发送信号的系统上的所有进程为0时,用于检索,特定pid进程是否存在,如不存在,返回-1

kill函数的语法格式:

raise()函数(自己向自己发送信号)语法要点:

下面的例子使子进程不在父进程调用kill之前不退出,然后父进程调用kill使子进程退出:

运行结果:

当去掉24行时,运行的结果是:

5.alarm()pause()

函数说明

  alarm()也称为闹钟函数,它可以在进程中设置一个定时器,当定时器指定的时间到时,它就向进程发送SIGALARM信号。要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm()之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。

 pause()函数用于将调用进程挂起直至捕捉到信号为止。这个函数很常用,通常可以用于判断信号是否已到。

函数格式

本实验上是完成一个简单的sleep()函数的功能,程序如下图

运行结果:

注释第9

运行结果:

上面一闪而得出结果。

分析:程序定时时,执行到第9pause()时,进程会被挂起,当计时到,发送信号SIGALARM,这时pause()捕捉到信号,进程直接被终止。

                                                                                                                                                       

再如通过alarm实现打印计数:


运行结果:


目录
相关文章
|
定位技术 开发工具 Android开发
Leaflet开发入门
Leaflet开发入门
578 0
|
消息中间件 存储 监控
实战Linux I/O多路复用:借助epoll,单线程高效管理10,000+并发连接
本文介绍了如何使用Linux的I/O多路复用技术`epoll`来高效管理超过10,000个并发连接。`epoll`允许单线程监控大量文件描述符,显著提高了资源利用率。文章详细阐述了`epoll`的几个关键接口,包括`epoll_create`、`epoll_ctl`和`epoll_wait`,以及它们在处理并发连接中的作用。此外,还探讨了`epoll`在高并发TCP服务场景的应用,展示了如何通过`epoll`和线程/协程池来构建服务框架。
1299 110
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
1597 3
|
机器学习/深度学习 人工智能 自然语言处理
LLMs 入门实战系列大全:LLMs应用、领域大模型介绍、大模型常见面经汇总
LLMs 入门实战系列大全:LLMs应用、领域大模型介绍、大模型常见面经汇总
LLMs 入门实战系列大全:LLMs应用、领域大模型介绍、大模型常见面经汇总
|
开发框架 JSON API
Python中FastAPI项目使用 Annotated的参数设计
Python中FastAPI项目使用 Annotated的参数设计
|
关系型数据库 MySQL 数据安全/隐私保护
mysql无法启动服务connect to server at ‘localhost‘ failed
mysql无法启动服务connect to server at ‘localhost‘ failed
|
缓存 负载均衡 数据管理
深入探索微服务架构的核心要素与实践策略在当今软件开发领域,微服务架构以其独特的优势和灵活性,已成为众多企业和开发者的首选。本文将深入探讨微服务架构的核心要素,包括服务拆分、通信机制、数据管理等,并结合实际案例分析其在不同场景下的应用策略,旨在为读者提供一套全面、深入的微服务架构实践指南。**
**微服务架构作为软件开发领域的热门话题,正引领着一场技术革新。本文从微服务架构的核心要素出发,详细阐述了服务拆分的原则与方法、通信机制的选择与优化、数据管理的策略与挑战等内容。同时,结合具体案例,分析了微服务架构在不同场景下的应用策略,为读者提供了实用的指导和建议。
|
存储 运维 监控
Elasticsearch 配置文件 path.data 中可以配置多个数据目录的路径吗?
Elasticsearch 配置文件 path.data 中可以配置多个数据目录的路径吗?
|
消息中间件 存储 网络协议
一文搞懂分布式消息中间件设计
一文搞懂分布式消息中间件设计
676 70