Liunx多任务-IPC机制

Linux进程间通信(IPC)机制全解析:从管道到Socket的实战指南 进程间通信是操作系统实现多进程协作的核心技术,它解决了进程间数据交换与同步的问题。其基本原理是通过内核提供的共享资源或通信通道,让彼此隔离的进程能够传递信息、协调动作。从技术价值看,IPC机制是构建模块化、高性能、可扩展软件系统的基石,尤其在服务器开发、微服务架构、高性能计算等场景中不可或缺。常见的IPC技术包括管道、信号、消息队列、共享内存和Socket等,每种机制都有其特定的适用场景与性能特征。例如,共享内存结合信号量能实现最高效的数据共享,而Unix Domain Socket则在客户端-服务器架构中 阅读详情

一.无名管道

无名管道:只能用在具有亲缘关系的进程间通信(父子进程)

操作流程:
1.创建并打开管道:pipe();
2.读管道:read();
3.写管道:write();
4.关闭管道:close();

int pipe(int pipefd[2]);

功能:在内核区创建并打开一个无名管道(即缓冲区),父子共用内核区(在创建父子进程之前,否则在内核区创建两个独立管道)
参数:
        pipefd:管道读端和写端的文件描述符
        pipefd[0]        读端
        pipefd[1]        写端
返回值:
        成功:0
        失败:-1

管道的特点:
管道本质是内核中的一段缓冲区,默认64K字节,遵循队列存储方式(FIFO),数据在管道中被读取后,会自动从内核缓冲区中移除(出队)。
1.写阻塞:当管道的读写端都存在时,管道写满数据时,发生写阻塞。

2.读阻塞:当管道的读写端都存在时,管道为空时,读管道发生读阻塞。

3.读返回0:当管道没有写端(close(pipefd[1]),只有读端时,管道中有数据则读出数据,无数据时,不再读阻塞,读管道直接返回0字节。

4.管道破裂:当管道没有读端(close(pipefd[2]),向管道中写数据,发生管道破裂异常。

二.有名管道

有名管道:可以用在同一主机,任意进程间通信

1.创建有名管道文件:mkfifo();

    int ret = mkfifo("myfifo2",0664);
    if(ret == -1&& errno != EEXIST)
    {
        perror("mkfifo2 error");
        return NULL;
    }

2.打开管道文件:open();

    int fd = open("myfifo2",O_WRONLY);
    if(fd == -1)
    {
        perror("open error");
        return NULL;
    }

谁先运行open 的行为
读端(O_RDONLY)先运行open 会阻塞,直到有写端(O_WRONLY)打开同一个管道。因为内核知道“没有人在写,你读也是白读”,所以让你等着。
写端(O_WRONLY)先运行open 也会阻塞,直到有读端(O_RDONLY)打开同一个管道。因为内核认为“没有人在读,你写了也没人收”,所以也让你等着。
使用 O_RDWR(读写都开)如果你用 open("myfifo", O_RDWR),那么不会阻塞,立即返回。因为进程自己同时充当读和写,内核认为“反正你能自己跟自己玩”,所以不等待对方。

3.写管道文件:write():
4.读管道文件:read();
5.关闭管道文件:close();

三.信号

信号:进程间通知机制(不携带数据)--异步通信

信号:软中断

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV  12) SIGUSR2  13) SIGPIPE 14) SIGALRM  15) SIGTERM
16) SIGSTKFLT  17) SIGCHLD 18) SIGCONT 19) SIGSTOP  20) SIGTSTP
21) SIGTTIN  22) SIGTTOU 23) SIGURG 24) SIGXCPU  25) SIGXFSZ
26) SIGVTALRM  27) SIGPROF  28) SIGWINCH  29) SIGIO  30) SIGPWR
31) SIGSYS   34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10  45) SIGRTMIN+11 46) SIGRTMIN+12

47) SIGRTMIN+13  48) SIGRTMIN+14   49) SIGRTMIN+15  50) SIGRTMAX-14

51) SIGRTMAX-13  52) SIGRTMAX-12   53) SIGRTMAX-11 54) SIGRTMAX-10

55) SIGRTMAX-9   56) SIGRTMAX-8   57) SIGRTMAX-7  58) SIGRTMAX-6

59) SIGRTMAX-5   60) SIGRTMAX-4   61) SIGRTMAX-3   62) SIGRTMAX-2
63) SIGRTMAX-1   64) SIGRTMAX

2) SIGINT:ctrl + c
让一个进程被打断
3) SIGQUIT:ctrl + \
让一个进程结束
9) SIGKILL:
强制让一个进程结束
11)SIGSEGV:
让一个进程结束(段错误)
13)SIGPIPE:
让一个进程结束(管道破裂)
14)SIGALRM:
让一个进程结束(定时时间到达)
17)SIGCHLD:
子进程结束时发送给父进程
18)SIGCONT:
让停止态的进程继续执行
19)SIGSTOP:
让运行态的进程进入停止态(暂停)强制停止
20)SIGTSTP:
ctrl + z 让进程进入暂停态,后台进程
来自终端的停止信号
10 SIGUSR1
12 SIGUSR2
专门预留给程序员使用的未定义信号。

1.注册信号

信号处理方式:

1.忽略:不处理

2.缺省:按照操作系统默认方式处理

3.捕获:按照自定义方式处理

sighandler_t signal(int signum, sighandler_t handler);
功能:注册一个信号
参数:
  signum :要注册的信号的编号
  handler:对信号的处理方式
        SIG_IGN : 按忽略方式处理
        SIG_DFL :按照缺省方式处理
        自定义的函数:按照捕获方式处理
返回值:
        成功:handler
        失败:SIG_ERR

注意:
1. 如果信号不注册,自动按照默认(缺省)方式处理;大多数信号默认处理方式是结束一个进程。
2. 信号尽量早注册。

2.发送信号

int kill(pid_t pid, int sig);
功能:给进程发送一个信号,与signal注册信号搭配使用
参数:
pid:接收信号的进程
sig:信号的编号
返回值:
成功:0
失败:-1

3.pause()

void pause(void);
功能:挂起一个进程(让进程进入休眠)
可以通过一个信号唤醒pause挂起的进程,但是这个信号必须被捕获(先注册)。

4.alarm

unsigned int alarm(unsigned int seconds);
功能:定时若干秒之后发送一个SIGALRM的信号,可以注册自定义实现方式

pause与alarm实现sleep功能

void handler(int signum)
{
    printf("%d signal is coming ,end\n",signum);
}
void mysleep(int n)
{
    signal(SIGALRM,handler);
    alarm(5);
    int cnt = 4;
    while(cnt--)
    {
        printf("sleeping\n");
        sleep(1);
    }
    pause();
}
//定时5秒闹钟后,执行4秒的任务,任务结束后陷入pause,第五秒结束时alarm发送SIGALRM信号,执行handler函数,执行结束后pause返回。信号处理函数(handler)一定先执行,然后 pause() 才返回。

四.消息队列

system V : IPC对象
消息队列与管道的区别:
1. 将进程间通信的数据封装成消息体发送;
2. 增加消息类型,可以根据消息的类型设置数据的优先级。

1. 获取IPC的key值:ftok();
2. 创建消息队列 :msgget();
3. 发送消息队列消息: msgsnd();
4. 接收消息队列消息 :msgrcv();
5. 删除消息队列 : msgctl();
 

struct msgbuf {
    long mtype;       /* message type, must be > 0 */
    char mtext[MSG_LEN];    /* message data */
 };
//系统定义的消息体结构,消息正文大小可自定义

1.ftok

key_t ftok(const char *pathname, int proj_id);
功能:产生一个IPC对象key值
参数:
pathname:路径名
proj_id:项目id
返回值:
成功:key值
失败:-1


    key_t key = ftok(".", '?');
    if (-1 == key)
    {
        perror("ftok error");
        return -1;
    }
    printf("key = %#x\n", key);

2.msgget

int msgget(key_t key, int msgflg);
功能:根据key值创建一个消息队列,如果存在返回消息队列ID
参数:
key: IPC key值
msgflg:IPC_CREAT|0664
返回值:
成功:消息队列ID
失败:-1

  int msgid = msgget(key, IPC_CREAT|0664);
    if (-1 == msgid)
    {
        perror("msgget error");
        return -1;
    }
    printf("msgid = %d\n", msgid);

3.msgsnd

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
功能:发送消息队列的消息
参数:
msqid:消息队列ID
msgp:要发送的消息体
struct msgbuf {
long mtype; /* message type, must be > 0 */ 消息类型
char mtext[1]; /* message data */ 消息正文
};
msgsz:消息正文大小
msgflg :标志位:0:默认方式发送
返回值:
成功:0
失败:-1

   while (1)
    {
        msg.mtype = MSG_TYPE_CHAT;
        fgets(msg.mtext, MSG_LEN, stdin);//读取用LEN最大长度

        int ret = msgsnd(msgid, &msg, strlen(msg.mtext), 0);//发送用实际读取的长度
        if (-1 == ret)
        {
            perror("msgsnd error");
            return -1;
        }
    }

4.msgrcv

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
int msgflg);
功能:从消息队列中接收消息
参数:
msqid:消息队列ID
msgp :要接受的消息的存储位置
msgsz:消息正文的大小
msgtyp:消息类型
msgflg:标志位:0:默认方式(阻塞方式)
返回值:
成功:返回实际消息正文的大小
失败:-1

  while (1)
    {
        memset(&msg, 0, sizeof(msg));
        ssize_t ret = msgrcv(msgid, &msg, MSG_LEN, MSG_TYPE_CHAT, 0);
        if (-1 == ret)
        {
            perror("msgrcv error");
            return -1;
        }
        printf("msg = %s\n", msg.mtext);
    }

5.msgctl

int msgctl(int msqid, int cmd, struct msqid_ds *buf);
功能:操作IPC对象对应的消息队列
参数:
msqid:消息队列的id
cmd:操作方法:
IPC_STAT:获取状态操作
IPC_SET: 设置
IPC_RMID:删除操作
buf:
IPC_RMID :buff-》NULL
返回值:
成功:0
失败:-1

 msgctl(msgid, IPC_RMID, NULL);

6.IPC对象命令

ipcs -a
查看系统中的IPC对象


ipcrm -q msgid
ipcrm -Q msgkey
删除消息队列


ipcrm -m shmid
ipcrm -M shmkey
删除共享内存

五.共享内存

共享内存:进程间效率最高的通信方式
利用内存映射技术,避免了数据的反复拷贝

1.获取IPC对象的key值:ftok();
2.创建共享内存:shmget();
3.共享内存和用户进程空间建立内存映射关系:shmat():
4.向用户空间写入/读出数据:
5.解除内存映射关系:shmdt();
6.删除共享内存:shmctl();

1.shmget

int shmget(key_t key, size_t size, int shmflg);
功能:创建共享内存并获得共享内存的id
参数:
key :IPC对象key值
size:共享内存的大小(PAGE_SIZE(4096字节)整数倍)
shmflg: IPC_CREAT | 0664
返回值:
成功:共享内存的ID
失败:-1

    int shmid = shmget(key, 4096, IPC_CREAT | 0664);
    if (-1 == shmid)
    {
        perror("shmget error");
        return -1;
    }
    printf("shmid = %d\n", shmid);

2.shmat

void *shmat(int shmid, const void *shmaddr, int shmflg);
功能:建立共享内存和用户空间的内存映射
参数:
  shmid:共享内存id
  shmaddr:映射的用户空间首地址
        NULL :由操作系统选择用户空间并以返回值的方式返回空间首地址
shmflg :
        SHM_RDONLY :只读
        !SHM_RDONLY :读写
返回值:
成功:映射的用户空间首地址
失败:(void *)-1

    void *pmem = shmat(shmid, NULL, !SHM_RDONLY);
    if ((void *)-1 == pmem)
    {
        perror("shmat error");
        return -1;
    }

3.shmctl

int shmctl(int shmid, int cmd, struct shmid_ds *buf);
功能:操作共享内存
参数:
shmid:共享内存id
cmd:操作指令
        IPC_RMID: 删除操作
buf: NULL
返回值:
成功:0
失败:-1

    shmdt(pmem);//解除内存映射

    shmctl(shmid, IPC_RMID, NULL);

六.信号量集

信号量集(信号量数组):进程间同步。

Windows下TensorRT+YOLOv11部署避坑指南:从CUDA配置到模型加密全流程 本文详细解析了在Windows平台部署YOLOv11与TensorRT的全流程,重点涵盖从CUDA环境配置、工程编译适配到模型加密保护的实战指南。基于wang-xinyu的tensorrtx仓库,提供了详细的版本选择、编译问题修复方案,并深入探讨了如何对TensorRT引擎进行加密,以实现高效且安全的端到端部署。 阅读详情

相关推荐

UE4/5项目GPU崩溃?可能是Windows的TDR机制在搞鬼!深入浅出聊聊TdrDelay与显卡超时

本文深入探讨了UE4/5项目中GPU崩溃的常见原因,揭示了Windows TDR机制的工作原理及其对渲染进程的影响。通过调整TdrDelay参数和优化GPU负载,提供了解决显卡超时问题的实用方案,帮助开发者提升项目稳定性。

weixin_30691649的博客 410

liunx ipc 信号量

这里写目录标题介绍原理函数范例注意ipcs -aipcs -qipcs -sipcs -mipcs -q -i idipcs -m -lipcs -cipcs -m -cipcs -q -cipcs -s -cipcs -pipcs -m -pipcs -q -pipcs -tipcs -q -tipcs -m -tipcs -s -tipcs -u 介绍 信号量准确的来说不算是一种ipc通信机制,更像是一种ipc通信的辅助机制,在信号量的约束下,不同进程访问共享资源或者临界资源的时候,会判断当前信号量是否

android 262

Vite与Webpack路径配置大不同:从Vue2迁移到Vue3必须知道的public目录使用技巧

本文详细解析了Vite与Webpack在public目录路径配置上的核心差异,为Vue2迁移到Vue3的开发者提供实用指南。重点对比了两种构建工具的资源处理逻辑,给出典型编译警告的解决方案,并分享路径适配表与高级优化技巧,帮助开发者高效完成技术栈升级。

weixin_30836759的博客 485

liunx ipc 共享内存

共享内存介绍基本原理函数范例执行结果 介绍 共享内存是liunx平台的一种IPC机制,不同进程可以对同一块内存进行读写,由于所有进程对共享内存的访问就和访问自己的内存空间一样,而 不需要进行额外系统调用或内核操作,同时还避免了多余的内存拷贝,所以,这种方式是效率最高、速度最快的进程间通信方式。共享内存和 android中binder的通信机制相比,避免了一次copy操作。一般对于共享内存的操作为了避免进程之间的紊乱,会配合使用类似信号量等别的机制 加以访问限制访问顺序。 基本原理 我们知道共享内存的

android 188

ROS学习笔记之——无人机PID调参过程记录

For cooperaive inquiries, please visit the website:guanweipeng.com

gwpscut的博客 6829

深入IR2104数据手册:被忽略的SD引脚用法和死区时间调节实战

本文深入解析IR2104半桥驱动芯片的SD引脚用法和死区时间调节技巧,帮助硬件工程师优化电机控制和电源转换系统。通过详细的电路设计、实测数据和调试方法,揭示SD引脚的多重保护机制和死区时间的精密调节策略,提升系统安全性和效率。

weixin_30342363的博客 391

Linux系统--liunx进程通信方式

liunx六大进程间通信方式 ??? 管道,消息队列,共享内存,信号量,socket,信号,文件锁 1,管道 1,匿名管道: 概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,一般使用fork函数实现父子进程的通信。 2,命名管道 FIFO: 概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,没有血缘关系的进程也可以进程间通信。 3,特点: 1,面向字节流...

杨杨子江的博客 189

通过薄膜太阳能电池中的热激电流量化陷阱状态

发光(led)和光伏(PV)器件的性能取决于光活性半导体材料的质量。由于材料杂质或在制造过程中在半导体材料中无意地引入缺陷,导致偏离最佳性能。这些缺陷被称为阱态,或简称“阱”,它是半导体带隙内的高能态。一般来说,陷阱的发生可能是由于材料杂质(在散装)或在不同材料层之间的界面。在有机半导体中,由于天然物质的无序性,阱态经常出现。在无机和杂化半导体(例如:杂化钙钛矿、硅……)中,晶界的存在是圈闭态的已知来源。由于陷阱产生的原因多种多样,它们对装置的影响也是多种多样的。由于载流子的多次捕获和释放事件,特别是浅阱的

FluximAG的博客 2849

深入Linux内核:IPC资源管理揭秘

在现代操作系统中,进程间通信(IPC, Inter-Process Communication)是实现多进程协同工作的基石。System V IPC 机制是Unix/Linux内核中一套经典且强大的进程间通信工具,主要包括消息队列(Message Queues)、信号量(Semaphores) 和共享内存(Shared Memory)。本文旨在对消息队列和信号量的核心概念进行阐述,并深入剖析内核统一管理这些IPC资源的机制。

2402_84532723的博客 2549

Spatial-ORMLLM: Improve Spatial Relation Understanding in the Operating Room with Multimodal Larg...

手术室(OR)中的精准空间建模是众多临床任务的基础,可为术中感知、风险规避及手术决策提供支持。现有方法虽利用大规模多模态数据集进行 latent 空间对齐,以隐式学习空间关系,但却忽视了多模态大型语言模型(MLLM)的3D能力。然而,这种方法存在两个问题:1)手术室通常缺乏多台视频和音频传感器,多模态3D数据难以获取;2)仅依赖易获取的2D数据训练,无法捕捉复杂场景中的细粒度细节。为解决这一问题,我们提出——首个针对手术室3D空间推理的大型视觉语言模型。

UnknownBody_2的博客 592

Agent应用实践之三 - 基础:AgentScope-ReActAgent源码解析

本章通过总结AgentScope的核心类,再通过分析ReActAgent调用大模型的底层源码原理。使我们基本了解了Agent的基本原理,这个实现方式与OpenClaw使用pi-mono的Agent基础框架是一致的。了解完ReActAgent的基本原理,下一章我们会将一下SpringBoot集成方式的代码原理,这两章是我们构建后续内容的基本框架。

代码让AI扣 470

Liunx系统 : 进程间通信【IPC-Shm共享内存】

介绍共享内存的通信方式

shijiaqingsnfx的博客 1518

从 AI 助手到 ADT 自动化桥梁:全面解析 Vibing Steampunk 的定位、能力边界与典型使用场合

Vibing Steampunk是一个面向SAP ABAP开发的AI自动化工具集,它通过ADT API将SAP开发能力系统化地暴露给AI助手和命令行工作流。该工具支持ECC、S/4HANA等所有启用ADT的系统,提供代码读取、修改、测试、调试等全流程自动化能力。核心功能包括AI调试、上下文压缩、ABAP语言服务、Lua脚本自动化等,并内置多重安全控制。其分层架构兼容标准ADT和WebSocket扩展,既适合AI驱动开发,也支持传统DevOps自动化,特别适用于老系统代码考古、知识接力和复杂问题诊断场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 152

linux下六大IPC机制【转】

转自http://blog.sina.com.cn/s/blog_587c016a0100nfeq.html linux下进程间通信IPC的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;信号(Signal):信号是比较复杂的通信方式,用...

weixin_34067049的博客 72

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux 网络编程:使用Socket套接字实现IPC进程间通讯

Socket IPC结合了网络编程的灵活性和本地通信的高效性,是Linux系统编程中的重要工具。通过本文的学习,你不仅掌握了Socket IPC的实现方法,还了解了各种IPC方式的适用场景。在实际项目中,根据具体需求选择合适的IPC方式,往往能达到事半功倍的效果。关注我,持续更新 Linux/C++/网络编程干货!

buyutang_的博客 1008

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

liunx下的PV操作 对同一段代码同时只能有一个进程运行

信号量,是一种特殊的变量。只能对信号量执行P操作和V操作P操作, 如果信号量的值 > 0, 则把该信号量减1如果信号量的值 ==0, 则挂起该进程。V操作: 如果有进程因该信号量而被挂起,则恢复该进程运行如果没有进程因该信号量而挂起,则把该信号量加1注意:P操作、V操作都是原子操作,即其在执行时,不会被中断。注意:此指的“信号量”是指System V IPC的信号量,与线程所使用的信号量不同。该信号量,用于进程间通信。

weixin_52243202的博客 746

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Liunx系统编程(纯理论分享一)

本文主要介绍了Linux系统中的I/O操作、进程管理和进程间通信机制。在I/O部分,对比了标准I/O和文件I/O的区别,详细说明了缓冲机制及其刷新方式;在进程部分,阐述了进程状态、创建方法及通信方式;最后介绍了三种进程间通信机制(共享内存、消息队列、信号量)及其特点。全文涵盖了Linux系统编程的核心概念,包括I/O效率优化、进程管理和IPC实现方法,为系统编程提供了理论基础。

一个苦逼的小小程序员 1023

liunx六大进程间通信方式

liunx六大进程间通信方式 管道,消息队列,共享内存,信号量,socket,信号,文件锁 1,管道 1,匿名管道: 概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,一般使用fork函数实现父子进程的通信。 2,命名管道: ...

u011119684的博客 160

LINUX-并发程序设计System V IPC篇

System V IPC IPC对象包含:共享内存,消息队列和信号灯集 每个IPC对象有唯一的ID IPC对象创建后一直存在,直到被显式地删除 每个IPC对象有一个关联的KEY ipcs/ipcrm ftok(file to key) #include<sys/types.h> #include<sys/ipc.h> key_t ftok(const char *path,int proj_id); 成功时返回合法的key值,失败时返回EOF path:存在且可访问的文件的路径

Ray的博客 229

Liunx 进程通信

cat打印的数据给wc指令进行处理。每个进程都有一份独立的虚拟地址空间和页表,使得进程具有独立性,一个进程是看到另一个进程的资源,进程交互数据成本一定很高。此时的进程是不具备通信能力的,就这样的原因,操作系统要设计通信方式。两个进程要互相通信,必须得先看到一份由操作系统管理的公共资源,这里其实就是一段内存,可能以文件方式提供也可能提供的就是原始的内存块,这也就是通信方式有很多种的原因。...

weixin_58004346的博客 444

Liunx进程间通信之信号

常用的进程间通信(IPC,InterProcess Communication)的方法 信号 ( Sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生; 管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(通常是指父子进程关系) 的进程间使用; 命名管道FIFO:命名管道(Named Pipe)也是半双工的通信方式,但...

Tian Jincheng's Blog 518

收藏关于Linux IPC的一个系列的文章

http://www.cppblog.com/converse/archive/2007/03/14/19855.html 原帖发表在IBM的developerworks网站上,是一个系列的文章,作者郑彦兴,通过讲解和例子演示了Linux中几种IPC的使用方式,我觉得很好,在这里做一个保留,能看完的话Linux IPC的基础是没有问题的了。 一)Linux环境进程间通信(一)管道及有名管道

boyhailong的专栏 803

面试题:进程间通信的方式

liunx六大进程间通信方式            管道,消息队列,共享内存,信号量,socket,信号,文件锁 1,管道       1,匿名管道:                  概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,一般使用fork函数实现父子进程的通信。                                    2,命名管道:     ...

wm12345645的博客 4万+

Liunx深入理解进程池:从原理到C++实现的全链路解析

本文介绍了C++进程池技术的核心原理与实现。进程池采用Master-Slaver架构,通过预先创建固定数量的子进程复用处理任务,避免频繁创建销毁进程的开销。Master进程负责任务分发和子进程管理,Slaver进程阻塞等待并执行任务。使用匿名管道实现高效IPC通信,支持EOF触发优雅退出。文章详细解析了代码架构设计,包括Channel类、ProcessPool类、任务执行流程等,并讨论了关键问题如FD泄漏、优雅退出机制和负载均衡算法。最后总结了进程池的性能优势、优化方向以及典型应用场景,为高并发服务开发提供

2401_87353862的博客 391

liunx 进程通信

通讯方式 管道 管道实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在该进程的地址空间(这里的地址空间具体是哪个地方)中。其他进程可以将 同一段共享内存连接到自己的地址空间中。所有进程都可以访问共享内存中的地址,就好像它们是malloc分配的一样。如果一个进程..

hongyucai的博客 140

Liunx进程间通信:信号

常用的进程间通信(IPC,InterProcess Communication)的方法 ◆信号 ( Sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生; ◆管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(通常是指父子进程关系) 的进程间使用; ◆命名管道FIFO:命名管道(Named Pipe)也是半双工的通信方式,但是它允许...

weixin_46378291的博客 146
上一篇: Linux多任务-线程篇
下一篇: Liunx网络编程-传输层
剑指offer.
博客等级 码龄3年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值