1、什么是进程间通信?
答:
进程间通信就是在不同进程之间传播或交换信息。
2、无名管道与有名管道的优缺点
答:
管道用于具有亲缘关系的进程间通信,用户自己创建管道,并完成读写操作
FIFO可以说是管道的推广,克服了无名管道的克制,使得无亲缘关系的进程同样可以采用先进先出的通信机制进行通信。
3、 有名管道与消息队列的区别是什么
答:
消息队列:用于消息,不是简单的数据信息传递,消息队列还包括消息有优先级,消息到达通知等;
管道:低级的通信机制,消息队列比管道高级,无名管道和有名管道依然比较低级,完成高级的应用服务器还需要消息队列等。
4、为什么读写有名信道,要设置阻塞标志
答:
对于阻塞写来说,写操作在写满FIFO的空闲区域后,会一直等待,直到写完所有数据为止,请求写入的数据的最终都会写入FIFO。
5、Linux下进程间通信方式有有那些?
答:
管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量( semophore) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号 ( sinal) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
共享内存( sharedmemory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
套接字( socket) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
6、发送信号的主要函数的作用是什么
答:
Kill:可以发送信号给信号和进程组,它不仅可以终止进程,也可以向进程发送其他信号;raise()函数允许进程向自身发送信号
Alarm()可以在进程中设置定时器,等到时间到达时,就会向进程发生SIGALARM信号,注意的是,一个进程只有一个闹钟;pause()直接将信号挂起直到捕捉到信号为止。
7.、消息队列中读完后是否删除相对应的消息
答:
后台数据存储是分文件存储的,已读完的数据文件将被清理,所以不会消耗存储资源。消息队列只缓存当前读和写的数据文件,性能不随数据量增大而下降。
8.、信号的局限在于?
答:
这种通信可携带的信息极少,不适合需要经常携带数据的通信;
不具备同步机制,类似于中断,什么时候产生信号,进程是不知道的。
9、进程间通信有什么不常用的方式
答:
普通PIPE,流PIPE,命名PIPE,消息队列,信号量,共享存储,UNIX流SOCKET,UNIX数据包SOCKET。
10、信号会不会丢失,在哪里丢失
答:
在信号的生命周期里,当一个非实时信号发送给一个进程时,如果该信号已经在进程中注册,则该信号将被丢弃,造成信号丢失。因此,非实时信号又叫做“不可靠信号”。