Linux进程通信

这篇博客详细介绍了Linux下的进程通信方式,包括信号、管道与FIFO文件、System V IPC(信号量、共享内存、消息队列)以及POSIX消息队列和Socket套接字。信号是异步通信机制,用于通知进程特定事件。管道和FIFO提供单向数据流,而System V IPC的三种机制支持进程间共享资源和数据传递。POSIX消息队列增加了优先级和异步通知等功能。Socket套接字则提供了网络通信的能力,支持流式和数据报两种类型,常用于TCP和UDP协议。
摘要由CSDN通过智能技术生成

目录

一、信号

 二、管道与FIFO文件

三、System V IPC

四、POSIX消息队列

五、Socket套接字


一、信号

     信号是Linux进程间异步通信的唯一机制,用于通知进程一个特定的事件并强迫进程执行对应的处理程序,如用户在键盘上按crtl+c,内核会给当前控制台上正在运行的进程发送一个SIGINT的信号,进程收到该信号执行默认处理程序,即终止进程。在代码中信号是一组预定义的无符号整数,用两个字节来保存,所以最多是64个,执行kill -l命令会列出Linux支持的所有的信号,如下图:

其中前31个是继承自Unix的标准信号,其余的都是POSIX标准引入的扩展信号,叫做实时信号,两者区别如下:

1、当一个标准信号被阻塞时,后续发送给同一进程的同一信号则都会被丢弃。实时信号不会丢弃,而会进入一个待处理队列排队,同一类型信号按照发送的顺序处理。对不同类型的信号按照下列顺序处理:SIGILL(4),SIGTRAP(5),SIGBUS(7),SIGFPE(8),SIGSEGV(11), SIGSYS(31),其他标准信号(优先处理取值小的),实时信号。

2、标准信号传递到目标进程时没有携带任何信息,实时信号可以携带额外的如发送方相关的信息。

3、实时信号处理的优先级高于标准信号

4、实时信号没有明确的含义,由使用者自己来决定如何使用,标准信号有明确的含义和用途。

5、实时信号的默认都是结束当前的进程,标准信号有多种默认操作。

      按照信号的用途可以分为以下几类:

1、进程控制,如SIGHUP挂机进程,SIGKILL强制终止进程,SIGTERM终止进程,SIGSTOP停止进程执行等

2、进程执行异常通知,如SIGILL非法指令,SIGABRT异常结束,SIGFPE浮点计算异常,SIGSEGV无效内存引用等

3、硬件错误通知,如SIGBUS总线错误,SIGSTKFLT协处理器栈错误,SIGPWR电源故障

4、跟踪进程执行,只有一个SIGTRAP

5、用户键盘操作通知,如SIGINT对应键盘的ctrl+c, SIGQUIT对应键盘的Ctrl+\,与SIGINT区别是会执行内存数据dump操作

6、定时通知,如SIGALRM,达到进程设置的时间后通知进程。

     进程接收信号的本质是内核将该信号写入进程描述符中信号相关的字段中,进程处理信号有三种方法:

1、显示的忽略信号;

2、执行与信号相关的默认操作,默认操作取决于信号的类型,包含以下几种:Treminate(终止进程),Dump(终止进程并尽可能做核心转储),Ignore(忽略信号),Stop(停止进程执行,即把进程置为TASK_STOPPED状态),Continue(让TASK_STOPPED状态的进程继续执行)

3、调用自定义的信号捕获程序

     信号如果不需要立即处理,可以阻塞信号,被阻塞的信号称为挂起信号(pending signal)。进程执行某个信号的处理程序时会自动阻塞该信号,即进程在处理完成前不会再接收同一信号,不会被同一信号中断,但是如果接收了其他信号则可能中

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值