进程间通信的信号

作者&投稿:衡徐 (若有异议请与网页底部的电邮联系)
进程之间有哪些基本的通信方式?分别有什么特点~

# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

1管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
2信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
3报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
4共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
5信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
6套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

信号(Signals )是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知进程系统中发生了某种预先规定好的事件(一组事件中的一个),它也是用户进程之间通信和同步的一种原始机制。一个键盘中断或者一个错误条件(比如进程试图访问它的虚拟内存中不存在的位置等)都有可能产生一个信号。Shell也使用信号向它的子进程发送作业控制信号。
信号是在Unix System V中首先引入的,它实现了15种信号,但很不可靠。BSD4.2解决了其中的许多问题,而在BSD4.3中进一步加强和改善了信号机制。但两者的接口不完全兼容。在Posix 1003.1标准中做了一些强行规定,它定义了一个标准的信号接口,但没有规定接口的实现。目前几乎所有的Unix变种都提供了和Posix标准兼容的信号实现机制。
一、 在一个信号的生命周期中有两个阶段:生成和传送。当一个事件发生时,需要通知一个进程,这时生成一个信号。当进程识别出信号的到来,就采取适当的动作来传送或处理信号。在信号到来和进程对信号进行处理之间,信号在进程上挂起(pending)。
内核为进程生产信号,来响应不同的事件,这些事件就是信号源。主要的信号源如下:
异常:进程运行过程中出现异常;
其它进程:一个进程可以向另一个或一组进程发送信号;
终端中断:Ctrl-C,Ctrl-\等;
作业控制:前台、后台进程的管理;
分配额:CPU超时或文件大小突破限制;
通知:通知进程某事件发生,如I/O就绪等;
报警:计时器到期。
在 Linux 中,信号的种类和数目与硬件平台有关。内核用一个字代表所有的信号,每个信号占一位,因此一个字的位数就是系统可以支持的最多信号种类数。i386 平台上有32 种信号,而Alpha AXP 平台上最多可有 64 种信号。系统中有一组定义好的信号,它们可以由内核产生,也可以由系统中其它有权限的进程产生。可以使用kill命令列出系统中的信号集。
下面是几个常见的信号。
SIGHUP: 从终端上发出的结束信号;
SIGINT: 来自键盘的中断信号(Ctrl-C);
SIGQUIT:来自键盘的退出信号(Ctrl-\);
SIGFPE: 浮点异常信号(例如浮点运算溢出);
SIGKILL:该信号结束接收信号的进程;
SIGALRM:进程的定时器到期时,发送该信号;
SIGTERM:kill 命令发出的信号;
SIGCHLD:标识子进程停止或结束的信号;
SIGSTOP:来自键盘(Ctrl-Z)或调试程序的停止执行信号;
…………
每一个信号都有一个缺省动作,它是当进程没有给这个信号指定处理程序时,内核对信号的处理。有5种缺省的动作:
异常终止(abort):在进程的当前目录下,把进程的地址空间内容、寄存器内容保存到一个叫做core的文件中,而后终止进程。
退出(exit):不产生core文件,直接终止进程。
忽略(ignore):忽略该信号。
停止(stop):挂起该进程。
继续(continue):如果进程被挂起,则恢复进程的运行。否则,忽略信号。
进程可以对任何信号指定另一个动作或重载缺省动作,指定的新动作可以是忽略信号。进程也可以暂时地阻塞一个信号。因此进程可以选择对某种信号所采取的特定操作,这些操作包括:
忽略信号:进程可忽略产生的信号,但 SIGKILL 和 SIGSTOP 信号不能被忽略,必须处理(由进程自己或由内核处理)。进程可以忽略掉系统产生的大多数信号。
阻塞信号:进程可选择阻塞某些信号,即先将到来的某些信号记录下来,等到以后(解除阻塞后)再处理它。
由进程处理该信号:进程本身可在系统中注册处理信号的处理程序地址,当发出该信号时,由注册的处理程序处理信号。
由内核进行缺省处理:信号由内核的缺省处理程序处理,执行该信号的缺省动作。例如,进程接收到SIGFPE(浮点异常)的缺省动作是产生core并退出。大多数情况下,信号由内核处理。
需要指出的是,对信号的任何处理,包括终止进程,都必须由接收到信号的进程来执行。而进程要执行信号处理程序,就必须等到它真正运行时。因此,对信号的处理可能需要延迟一段时间。
信号没有固有的优先级。如果为一个进程同时产生了两个信号,这两个信号会以任意顺序出现在进程中并会按任意顺序被处理。另外,也没有机制用于区分同一种类的多个信号。如果进程在处理某个信号之前,又有相同的信号发出,则进程只能接收到一个信号。进程无法知道它接收了1个还是42个SIGCONT信号。




线程间通信有哪些方式
2. 消息队列 消息队列是一种线程间通信的先进先出数据结构。一个线程可以向队列发送消息,其他线程可以从队列接收消息。这种方式允许线程之间以非阻塞的方式进行通信,即发送消息的线程不必等待接收消息的线程处理完再执行。3. 信号量 信号量是一种同步原语,用于控制对共享资源的访问。通过信号量的增加和...

信号和信号量
含义:信号量指对共同资源进行访问控制的对象。在访问资源之前,线程必须从信号量获取许可,在访问完资源之后,这个线程必须将许可返回给信号量。一旦获得许可,信号量中可用许可的总数减1,一旦许可被释放,信号量中许可数加1.只有一个许可的信号量可用来模拟一个相互排斥的锁。锁和信号量之间的相似之处...

面试必备:Binder进程通信原理
但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决。 套接字(Socket): 作为更通用的接口,传输效率低,主要用于不同机器或跨网络的通信。 信号量(Semaphore): 常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此主要作为进程间以及同一进程内不同线程...

进程间通信的主要分类
进程间通信主要包括管道, 系统IPC(包括消息队列,信号,共享存储), 套接字(SOCKET).管道包括三种:1)普通管道PIPE, 通常有两种限制,一是单工,只能单向传输;二是只能在父子或者兄弟进程间使用.2)流管道s_pipe: 去除了第一种限制,为半双工,可以双向传输.3)命名管道:name_pipe, 去除了第二种限制,可...

请教一个Linux下C语言的进程间的信号问题
linux中的进程通信分为三个部分:低级通信,管道通信和进程间通信IPC(inter process communication)。linux的低级通信主要用来传递进程的控制信号——文件锁和软中断信号机制。linux的进程间通信IPC有三个部分——①信号量,②共享内存和③消息队列。以下是我编写的linux进程通信的C语言实现代码。操作系统...

linux进程间通讯的几种方式
三。信号(Signal)信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知某一进程发生了某一种预定好的事件;接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认处理机制—进程中断或退出,一是忽略该信号,还有就是自定义该信号的处理函数,执行相应的动作。内核为...

线程间的通信方式
线程间的通信方式:简单讲就是在锁、堆里的对象包括普通对象个原子变量,他们之间可以实现线程间的通信。1、通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值。线程A在一个同步块里设置boolean型成员变量hasDataToProcess为true,线程B也在同步块里读取hasDataToProcess这个...

用自己话描述TCP五层模式间如何通信?
网线等)进行传输。物理层协议负责物理信号的发送和接收,保证数据在物理层的正确传输。综上所述,TCP五层模型中不同层之间的通信是基于各自的协议进行的,每一层都提供特定的服务,实现了不同层之间的分离和互相配合。通过TCP五层模型,计算机之间可以进行可靠的数据传输,使得网络通信更加高效和安全。

linux多线程通信
最后还有个信号简单说一下。请注意,是信号,不是信号量。信号量是用于同步线程间的对象的使用的(建议题主看我的答案,自认为比较通俗易懂:semaphore和mutex的区别?-Linux-知乎 )。信号也是进程间通信的一种方式。比如在Linux系统下,一个进程正在执行时,你用键盘按Ctrl+c,就是给这个进程发送了...

如何在linux环境下实现进程之间的通信
信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。共享内存( shared memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它...

定结县18620445571: 进程间的通信方式 四种 -
栾凝茴拉: 现在最常用的进程间通信的方式有:信号,信号量,消息队列,共享内存. 所谓进程通信,就是不同进程之间进行一些"接触",这种接触有简单,也有复杂.机制不同,复杂度也不一样.通信是一个广义上的意义,不仅仅指传递一些...

定结县18620445571: 常见进程间通信方式有哪些 -
栾凝茴拉: #有名管道(namedpipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信.#信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问.它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源.因此,主要作为进程间以及同一进程内不同线程之间的同步手段.

定结县18620445571: 进程之间有哪几种通信方式? -
栾凝茴拉: 进程的亲缘关系通常是指父子进程关系. # 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信. # 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问....

定结县18620445571: linux进程间通讯的几种方式 -
栾凝茴拉: 一.管道(pipe)管道是Linux支持的最初IPC方式,管道可分为无名管道,有名管道等.(一)无名管道,它具有几个特点:1) 管道是半双工的,只能支持数据的单向流动;两进程间需要通信时需要建立起两个管道;2) 无名管道使用...

定结县18620445571: 进程间的通讯方式有几种?有什么优缺点?进程间的通讯方式有几种?有什么优缺点? -
栾凝茴拉:[答案] 用于进程间通讯(IPC)的四种不同技术: 1.消息传递(管道,FIFO,posix和system v消息队列) 2.同步(互斥锁,条件变量,读写锁,文件和记录锁,Posix和System V信号灯) 3.共享内存区(匿名共享内存区,有名Posix共享内存区,有名System ...

定结县18620445571: 进程间通信的方式有? -
栾凝茴拉: 进程间通信的方式有 进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享内存), SOCKET 等

定结县18620445571: 信息与条件是什么? -
栾凝茴拉: 信息化是指培养、发展以计算机为主的智能化工具为代表的新生产力,并使之造福于社会的历史过程.(智能化工具又称信息化的生产工具.它一般必须具备信息获取、信息传递、信息处理、信息再生、信息利用的功能.)与智能化工具相适应的生产力,称为信息化生产力.智能化生产工具与过去生产力中的生产工具不一样的是,它不是一件孤立分散的东西,而是一个具有庞大规模的、自上而下的、有组织的信息网络体系.这种网络性生产工具将改变人们的生产方式、工作方式、学习方式、交往方式、生活方式、思维方式等,将使人类社会发生极其深刻的变化.

定结县18620445571: 信号灯是不是不能用于进程间通信 -
栾凝茴拉: 参考1:# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. # 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无...

定结县18620445571: java 进程间通讯的有几种方法 -
栾凝茴拉: JAVA进程间通信的方法主要有以下几种:(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信.(2)命名管道(named pipe):命名管道克服了管道没有名字的限制,除具有...

定结县18620445571: 进程有哪几种通讯方式?试举例说明? -
栾凝茴拉: UNIX中有如下的通信方式,我是摘抄的百度词条里面的,仅供参考:1) 文件和记录锁定.为避免两个进程间同时要求访问同一共享资源而引起访问和操作的混乱,在进程对共享资源进行访问前必须对其进行锁定,该进程访问完后再释放.这是...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网