1. 为什么进程会共享内存
进程的用户空间是独立的,一般而言是不能互相访问的,唯一的例外是共享内存区
2. 进程间通信有什么不常用的方式
普通PIPE,流PIPE,命名PIPE,消息队列,信号量,共享存储,UNIX流SOCKET,UNIX数据包SOCKET
3. 无名管道与有名管道的优缺点
管道用于具有亲缘关系的进程间通信,用户自己创建管道,并完成读写操作
FIFO可以说是管道的推广,克服了无名管道的克制,使得无亲缘关系的进程同样可以采用先进先出的通信机制进行通信
4. 有名管道与消息队列的区别是什么
消息队列:用于消息,不是简单的数据信息传递,消息队列还包括消息有优先级,消息到达通知等;
管道:低级的通信机制,消息队列比管道高级,无名管道和有名管道依然比较低级,完成高级的应用服务器还需要消息队列等
5. 为什么读写有名信道,要设置阻塞标志
对于阻塞写来说,写操作在写满FIFO的空闲区域后,会一直等待,直到写完所有数据为止,请求写入的数据的最终都会写入FIFO
6. 发送信号的主要函数的作用是什么
Kill:可以发送信号给信号和进程组,它不仅可以终止进程,也可以向进程发送其他信号;raise()函数允许进程向自身发送信号
Alarm()可以在进程中设置定时器,等到时间到达时,就会向进程发生SIGALARM信号,注意的是,一个进程只有一个闹钟;pause()直接将信号挂起直到捕捉到信号为止
7. 消息队列中读完后是否删除相对应的消息
后台数据存储是分文件存储的,已读完的数据文件将被清理,所以不会消耗存储资源。消息队列只缓存当前读和写的数据文件,性能不随数据量增大而下降。
8. 信号的局限在于?
这种通信可携带的信息极少,不适合需要经常携带数据的通信;
不具备同步机制,类似于中断,什么时候产生信号,进程是不知道的
9. 信号会不会丢失,在哪里丢失
在信号的生命周期里,当一个非实时信号发送给一个进程时,如果该信号已经在进程中注册,则该信号将被丢弃,造成信号丢失。因此,非实时信号又叫做“不可靠信号”
10. 无名管道的应用实例有哪些
在SHELL中时常会用到管道,在这种应用方式下,管道的创建对用户来说是透明的
对于具有亲缘关系的进程间通信,用户自己创建管道,并完成读写操作