信号操作的相关函数如表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函数
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。