进程和信号和IPC机制:帮我记住

原创 2012年03月28日 17:50:36

一.信号

* <signal.h> <sys/type.h> <unistd.h>

* int sigaction( SIGINT, &act , 0 ) ;          act结构体:struct sigaction act;  { act.sa_handler = abc; sigemptyset (& act.sa_mask ) ;  act.sa_flags=0; }

* int kill (pid_t pid , int sig )   unsigned int alarm( unsigned int seconds) ;   pause()  getppid()   getpid()  void ding( ing sig) {} 这个是信号注册函数。 pid_t waitpid()   fork() ==0  子进程    -1 失败  system()   wait()  父等待子

--------------------------------------------------------

二。进程间的通信:管道

file=popen(命令,r or w )  ;通过file来,fwrite 读  fread 写

FIFO 先进先出  LIFO 后进先出                    ,   pipe调用(file[2]) :不需要启动一个shell , ---> 父子进程的读写通信  , dup() dup2()  FIFO文件 

管道具有阻塞特性------进程同步和数据的双向传递。

----------------------------------------------------------

三。IPC机制

一。信号量:0 和 1 :二进制信号量      多个正整数值:通用信号量

* linux 信号量函数都是针对成组的通用信号量进行操作的。 

* <sys/sem.h> 

*int semget(key_t key , int num_sems, int sem_flags);;   创建一个信号量或获取一个已有的信号量。

参数1:随便给一个数作为键  。  参数2:信号数量:一般为1    参数3: IPC_)CREAT || 0666  IPC_EXCL

*int semop(int sem_id , struct sembuf *sem_ops, size_t num_sem_ops );

用于改变信号量的值:  + 1  -1

struct sembuf {  

short sem_num ; 信号量编号,除非你使用一组信号量,否则一般取0

short sem_op;  +1 p 操作    -1  v操作

short sem_flg ;  一般设为sem_UNDO   要求系统自动清理该信号量

}

* int semctl( int sem_id , int sem_num , int command , .. ); 控制信号量函数 

参数2:一般为0,除非一组。   参数3:命令:设置呢还是删除呢   如果设置的话,参数4就是一个结构体罗。 即设过去罗

插入代码:493页

关键在于:可以封装成5个函数,1 get 创建或获取  2.初始化它  3.+1 p操作函数  4.-1 v 操作函数  5. 删除清理它

------------------------------------------------------

二。共享内存   :通过小消息来同步对该内存的访问(同步由程序员来实现)。 (在共享内存中搞个小成员标识一下是否可读,或者现在可写了。)

共享内存使用的函数类似于信号量函数,4个基本函数:

* <sys/shm.h>  shm_i  4个基本函数。

* int shmget ( key_t key , size_t size , int shmflg );   创建共享内存;  参数2:内存大小(字节) , 参数3:读写权限设置 IPC_CREAT | 0666

*void * shmat (int shm_id , const void * shm_addr , int shmflg); 将物理内存映射到进程内存

参数2: 给空指针,有系统自动选择地址映射  参数3:给0,由系统选一个连接地址。

* void shmdt(void* ) 参数是shmat()返回的地址指针。 解除映射,并未删除,即当前进程不可用该共享内存了。

* int shmctl (int shm_id , int command , sturct shmid_ds *buf) ; 共享内存控制函数 :删除,设置值。 

(已删除的共享内存,会直到它从最后一个进程中分离为止,才真正的删除掉了。)

?消费者和生产者?

插入代码:499页   ------》  共享内存  1. 消息标志 (1,0):用来控制同步 2.共享的数据:用来共享滴。

------------------------------------------------------

四。消息队列: 提供了一种在两个不相关的进程之间传递数据的简单又有小的方法。

* <sys/msg.h>  头文件

*int msgget(key_t key , int msg_flg);  创建和访问一个消息队列, 参数2: 由IPC_CREAT定义的一个特殊值和权限标志按或才能创建一个新的消息队列。

* int msgsnd(int msqid , const void *msg_ptr , size_t msg_sz, int msg_flg ); 把消息添加到消息队列中去。

参数2:消息指针   参数3:消息长度  参数4:如果消息队列满了,那么返回-1 呢还是 阻塞呢 等它减去一个呢。 所以这个是标识位

消息类型应该是如下类似结构:struct my_msg{  long int msg_type;   char mydata[100] ;}  第二个成员是随意一个类型。

* int msgrcv ( int msgid , void * msg_ptr , size_t msg_sz , long int msgtype, int msgflg); 获取消息

参数2:接收这个消息的指针  参数3:消息长度  参数4:消息类型 0  >0 <0  参数4: 没有消息的情况下如何处理呢?

* int msgctl (int msqid , int command , struct msqid _ds *buf); 消息队列控制函数, 同共享内存类似的功能。

插入代码! 消息队列无需进程提供同步方法。

-----------------------------------------------------------------------

大数据:用共享内存

小数据:用消息队列

IPC命令(shell命令):用来清理系统游离的IPC机制。

ipcs -s  ipcs -m ipcs -q   ;查看  信号量  共享内存  消息队列

ipcrm -s id  ipcrm -m id ipcrm -q id ; 删除系统游戏的IPC机制。

 

 

 

深入理解Linux进程间通信(IPC)-- 信号signal

2. 信号(上) 2.1. 信号及信号来源 2.1.1 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个...
  • petib_wangwei
  • petib_wangwei
  • 2014年08月06日 11:51
  • 1096

【Linux】进程间通信(IPC)之信号量详解与测试用例

学习环境centos6.5 Linux内核2.6进程间通信概述进程通信机制一般情况下,系统中运行着大量的进程,而每个进程之间并不是相互独立的,有些进程之间经常需要互相传递消息。但是每个进程在系统中都有...
  • a1414345
  • a1414345
  • 2017年03月22日 17:28
  • 1035

进程间通信(IPC) (3)—— 信号量与信号量集

信号量(semaphore)和信号量集(semaphore arrays) 信号量集是由信号量组成的数组,信号量其实就是一个计数器,用于控制 同时访问共享资源的 进程/线程的总数(IPC中的信号量只...
  • Robot__Man
  • Robot__Man
  • 2016年08月17日 23:57
  • 272

IPC进程之间通信的几种方式

进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所...
  • lady_lili
  • lady_lili
  • 2016年09月22日 16:41
  • 1391

linux signal信号处理过程与机制--完全实例讲解

信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。  信号机制是进程之间相互传递消息的一种方法...
  • lee244868149
  • lee244868149
  • 2014年08月20日 17:08
  • 2626

Linux-信号机制详解(一)

之前有写过SystemV的信号量机制,现在是信号。这里的信号和前面的信号量是不同的。这里的信号是进程给操作系统或进程的某种信息,让操作系统或者其他进程做出某种反应。       信号是进程间通信机...
  • leex_brave
  • leex_brave
  • 2016年07月17日 00:29
  • 3778

Android的IPC机制(一)——AIDL的使用

IPC(interprocess communication)是指进程间通信,也就是在两个进程间进行数据交互。不同的操作系统都有他们自己的一套IPC机制。例如在Linux操作系统中可以通过管道、信号量...
  • ljd2038
  • ljd2038
  • 2016年02月20日 13:54
  • 3662

JAVA进程间的通信方式(IPC)

JAVA进程间通信的方法主要有以下几种:   (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。   (2)命名管道(named p...
  • sindlly
  • sindlly
  • 2015年11月24日 15:46
  • 2458

Linux进程间通信——IPC共享内存学习笔记

Linux进程间通信——IPC共享内存学习笔记
  • MR_Allen_Lwx
  • MR_Allen_Lwx
  • 2016年10月15日 10:51
  • 607

Android的IPC机制

使用Messenger 1、特点:  * (1)Messenger对AIDL做了封装,使得我们可以更简便地进行进程间通信。  * 由于它一次处理一个请求,所以在服务端我们不考虑线程同步的问题,...
  • zizidemenghanxiao
  • zizidemenghanxiao
  • 2015年12月17日 15:35
  • 9217
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程和信号和IPC机制:帮我记住
举报原因:
原因补充:

(最多只允许输入30个字)