首页 理论教育 Linux系统编程:信号操作函数

Linux系统编程:信号操作函数

时间:2023-11-16 理论教育 版权反馈
【摘要】:信号操作的相关函数如表9.2所示。表9.3kill函数raise函数说明如表9.4所示。表9.4raise函数2.信号处理当某个信号被发送到一个正在运行的进程时,该进程即对此特定信号注册相应的信号处理函数,以完成所需处理。图9.3例9.3程序设计流程图表9.5signal函数3.信号阻塞有时既不希望进程在接收到信号时立刻中断进程的执行,也不希望此信号完全被忽略掉,而是延迟一段时间再去调用信号处理函数,这个时候就需要信号阻塞来完成。

Linux系统编程:信号操作函数

信号操作的相关函数如表9.2所示。

表9.2 信号操作的相关函数

1.信号发送

信号发送的关键,是使系统知道向哪个进程发送以及发送什么信号。能否向某一进程发送某一特定信号是和用户的权限密切相关的。

例9.2 设计一个程序,要求用户进程复制出一个子进程,父进程向子进程发出信号,子进程收到此信号,结束子进程。

程序设计流程如图9.2所示。

图9.2 例9.2程序设计流程图

源程序代码:

编译成功后,运行可执行文件,此时系统会显示子进程的进程号(PID)、kill函数的返回值和SIGKILL信号所结束进程的进程号(PID)。

由此例可知,系统调用kill函数和raise函数,都是简单地向某一进程发送信号。kill函数用于给特定的进程或进程组发送信号,raise函数用于向一个进程自身发送信号。

kill函数说明如表9.3所示。

表9.3 kill函数

raise函数说明如表9.4所示。

表9.4 raise函数

2.信号处理

当某个信号被发送到一个正在运行的进程时,该进程即对此特定信号注册相应的信号处理函数,以完成所需处理。

例9.3 设计一个程序,要求程序运行后进入无限循环,当用户按下中断键【Ctrl+C】时,进入程序的自定义信号处理函数,当用户再次按下中断键【Ctrl+C】后,结束程序运行。

源程序代码:

(www.xing528.com)

例9.3程序设计流程图如图9.3所示。

signal函数主要用于前31种非实时信号的处理,不支持信号传递信息(函数类型是void),但使用简单、方便,只需把要处理的信号和处理函数列出即可,因此很受软件工程师欢迎。

signal函数说明如表9.5所示。

图9.3 例9.3程序设计流程图

表9.5 signal函数

3.信号阻塞

有时既不希望进程在接收到信号时立刻中断进程的执行,也不希望此信号完全被忽略掉,而是延迟一段时间再去调用信号处理函数,这个时候就需要信号阻塞来完成。

例9.4 设计一个程序,要求程序主体运行时,即使用户按下中断键【Ctrl+C】,也不能影响正在运行的程序,等程序主体运行完毕后才能进入自定义信号处理函数。

程序设计流程图如图9.4所示。

图9.4 例9.4程序设计流程图

源程序代码:

sigemptyset函数说明如表9.6所示。

表9.6 sigemptyset函数

sigaddset函数说明如表9.7所示。

表9.7 sigaddset函数

sigprocmask函数说明如表9.8所示。

表9.8 sigprocmask函数

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈