进程大概枝杈【B篇】进程间通信

{个人整理}

六、进程间通信

<1>通信(communication)进程间传送数据,进程间,控制信息交换称为低级,大批量数据的交换称为高级。

<2>进程通信的类型

1* 共享存储系统

2* 消息传递系统

直接通信方式:消息缓冲队列

间接通信方式:信箱

3* 管道通信系统

连接一个读进程和一个写进程,以字符流方式将大量数据送入管道。

<3>消息缓冲队列通信机制

》简介:公用缓冲区 条件:.消息队列只服务唯一进程写消息

             .发送进程申请区队接收进程

        》消息缓冲队列通信机制中的而数据结构

.消息缓冲区(Message buffer

.PCB有关进程通信的数据项

Mq指针   mutex互斥信号量  sm消息队列

 

=== === === === ==== ==== ==== ==== ==== === ==== ==== ==== ==== ==== =====

Linux上的进程间通信{个人整理}

Linux程序和进程

进程ID

一、上帝进程init进程id=1,自举过程结束时由内核调用。

二、一些获取进程标识的函数

Pid_t  getpid(void)

Pid_t  getppid(void)

三、fork函数,父进程创建子进程

子进程一次性继承

Vfork函数父进程创建子进程

子进程有选择实用继承

四、exec函数

fork创建进程后,子进程往往要调用一种exec函数以执行另一个程序

exec函数族

l表示list:用链表调用程序

V表示vector:用字符串数组调用程序

五、进程通信的目的

.数据传输

.共享数据

.通知事件

.资源共享

.进程控制

 

六、Linux使用进程通信的方式

.管道(pipe)和有名管道(FIFO

.信号(signal

.消息队列

.共享内存

.信号量

.套接字(socket

 

七、信号通信

# 信号是软件中断,它用于一个或多个进程间传递异步信号

# 内核为进程生产信号,来响应不同时间,这些时间就是信号源

# Linux中的信号SIGxxx SIGUP SIGKILL SIGINT

# 信号三种处理方式:忽略信号 捕捉信号 执行系统默认动作

# 缺省动作,当进程没有给这个信号制定处理程序时,内核对信号的处理

 

△信号发送与捕捉

Kill()不仅可以中止进程,也可以向进程发送其他信号

Raise()函数运行向进程本身发送信号

 

△信号集函数组signal()信号捕捉处理函数(软中断)

 

△信号操作一般流程

定义信号集==》设置信号屏蔽位==》定义信号处理函数==》测试信号

 

八、共享内存

一个进程向共享内存写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。

实现步骤:(1)创建共享内存shmget();

 (2)映射共享内存shmat();

shmid共享内存ID号     shmadd地址指针  shmdt()进程脱离共享内存

 

 

九、消息队列Message【报文队列】

1.概念:消息的一个链表,具有一定的FIFO特性,但实现消息的随即查询

2.消息队列的实现:msgget创建打开一个消息队列

  msgsnd向队尾添加消息

  msgrcv读取

  msgctl控制

    qid 队列id号