Linux C编程 第13章进程间通信方式十个问题及解答(2)
1.信号种类怎么分类?
可以从两个不同的分类的角度对信号进行分类: 可靠性方面,分为可靠信号与不可靠信号; 与时间的关系上,可分为实时信号与非实时信号。
2.进程可以通过哪些方式来处理一个信号?
忽略信号:即对信号不做任何处理,其中,有两个信号不能忽略,即SIGKILL SIGSTOP。
捕捉信号:定义信号处理函数,当信号发生时,执行相应的处理函数。
执行默认操作:Linux 对每种信号都规定了默认操作,注意,进程对实时信号的默认反应是进程终止。
采用哪种方式来响应信号,取决于传递给相应API函数的参数。
3.发送信号的主要函数有哪些?
主要有kill(),raise() 、sigqueue()、alarm()、setitimer()、abort()。
4.可以用什么函数来实现信号的安装?
signal()函数:用于传送信号给指定的进程;
sigaction()函数:用于查询或设置信号处理方式。
5.使用信号注意事项?
防止不该丢失的信号丢失;
程序的可移植性;
程序的稳定性。
6.满足什么样的函数是不可再入的?
使用静态的数据结构;
函数实现时,调用了malloc()或者free()函数;
实现时使用了标准I/O函数的。
7.对消息队列的操作有几种类型?
打开或创建消息队列;
读写操作;
获得或设置消息队列属性。
8.信号灯有哪些类型?
二值信号灯:最简单的信号灯形式,信号灯的值只能取0或1,类似于互斥锁;
计算信号灯:信号灯的值可以取任意非负值。
9.信号灯操作的步骤?
打开过创建信号灯;
信号灯值操作;
获得或设置信号灯属性。
10.共享内存实现分为几个步骤?
创建共享内存,使用shmget函数;
映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。