进程的概念Process是操作系统的概念。每当我们执行一个程序时,都会为操作系统创建一个进程。在这个过程中,伴随着资源的分配和释放。进程可以被认为是程序的一次执行。进程通信的概念进程用户空间是相互独立的,一般来说,它们不能互相访问。但在很多情况下,进程之间需要相互通信来完成系统的某项功能。进程通过与内核和其他进程通信来协调它们的行为。进程通信应用场景数据传输:一个进程需要将自己的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。共享数据:多个进程想要操作共享数据,其他进程应该立即看到一个进程对共享数据的修改。通知事件:一个进程需要向另一个进程或一组进程发送消息,通知它(它们)某个事件已经发生(比如进程终止时通知父进程)。资源共享:同一个资源在多个进程之间共享。为此,内核需要提供锁和同步机制。进程控制:有些进程想完全控制另一个进程(如Debug进程)的执行。这时,控制进程希望能够拦截另一个进程的所有陷阱和异常,并且能够及时知道自己的状态变化。进程通信的方法1、管道分为命名管道和无名管道。无名管道是一种半双工通信方法。数据只能单向流动,只能在具有亲缘关系的进程之间使用。进程的亲和性一般是指父子关系。歧义管道一般用于两个不同进程之间的通信。当进程创建管道并调用fork创建自己的子进程时,父进程关闭读管道端,子进程关闭写管道端,为两个进程之间的数据流通提供了途径。众所周知的管道也是一种半双工的通信方式,但是它允许不相关的进程之间进行通信。2.信号量信号量是一个计数器,可以用来控制多个线程对共享资源的访问。它不用于交换大量数据,而是用于多个线程之间的同步。它经常被用作一种锁机制,防止一个进程访问资源的同时其他进程也访问该资源。因此,它主要用作进程之间以及同一进程中不同线程之间的同步手段。Linux提供了一组设计良好的信号量接口来对信号进行操作。它们不仅适用于二进制信号量,函数在下面进行了描述,但请注意,这些函数对信号量值组进行操作。它们在头文件sys/sem.h中声明。semget的作用是创建一个新的信号量或者获取一个已经存在的信号量。semop函数是改变信号量的值。semctl函数用于直接控制信号量信息。3.信号信号是一种比较复杂的通信方式,用于通知接收进程有事件发生。4.消息队列消息队列是消息的链表,存储在内核中,由消息队列标识符标识。消息队列克服了信号传输信息的不足,管道只能承载无格式字节流、缓冲区大小有限等特点。消息队列是UNIX下不同进程间共享资源的一种机制。UNIX允许不同的进程以消息队列的形式向任意进程发送格式化的数据流。.对消息队列有操作权限的进程可以使用msget完成对消息队列的操作控制。通过使用消息类型,进程可以按任意顺序读取信息,或者为消息安排优先顺序。5.共享内存共享内存是映射的一段内存,可以被其他进程访问。该共享内存由一个进程创建,但可以被多个进程访问。共享内存是最快的IPC(进程间通信)方式,它是为其他进程间通信方式而设计的。效率低,专门设计。它常与信号量等其他通信机制结合使用,以实现进程间的同步和通信。6.Socket套接字,即socket是一种通信机制,借助这种机制,可以在本地单机或跨机进行client/server(即进程通信)系统的开发一个网络。也就是说,它使不在同一台计算机上但通过网络连接的计算机上的进程能够进行通信。因此,套接字清楚地区分了客户端和服务器。套接字的特性由三个属性决定:域、类型和协议。
