当前位置:嗨网首页>书籍在线阅读

18-练习

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

22.15 练习

22-1.  22.2节曾指出,假设进程为SIGCONT信号建立了处理器函数并将其阻塞,如果该进程已停止(stopped)后因收到一个SIGCONT信号而恢复执行,那么仅当解除了对SIGCONT信号的阻塞时才会去调用信号处理器函数。编写一个程序来验证这一点。回忆一下,按下终端暂停字符(通常为Control-Z)可以停止进程,使用kill-CONT命令(或者隐蔽一点,使用shell的fg命令)可以发送SIGCONT信号。

22-2.  如果实时信号和标准信号在同时等待一个进程,那么SUSv3对信号的传递顺序未予定义。编写一程序来展示Linux是如何处理这一情况的。(令程序为所有信号设置处理器函数,阻塞这些信号并持续一段时间,以便于向其发送各种信号,最后解除对所有信号的阻塞。)

22-3.  22.10节指出,接收信号时,利用sigwaitinfo()调用要比信号处理器外加sigsuspend()调用的方法来得快。随本书发布的源码中提供的signals/sig_speed_sigsuspend.c程序使用sigsuspend()在父、子进程之间交替发送信号。请对两进程间交换一百万次信号所花费的时间进行计时。(信号交换次数可通过程序命令行参数来提供。)使用sigwaitinfo()作为替代技术来对程序进行修改,并度量该版本的耗时。两个程序间的速度差异在哪里?

22-4.  使用POSIX信号API来实现System V函数sigset()、sighold()、sigrelse()、sigignore()和sigpause()。

①译者注:指不生成核心转储文件。

②译者注:有,则将该信号的信息返回。作者的书似乎没有man手册页写得明了,请读者自行比较。