IPC,进程间通信
信号机制
也叫软中断,软件层次上对中断的模拟
kill -9 加进程号
可以终止进程
linux下执行kill -l
可以看到
这里面居然没有32 33 直接从31到34
所以一共是62个信号
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
信号17:子进程退出发送给父进程的信号
信号18:让暂停的进程继续运行
信号19:暂停进程,信号不能被忽略,捕捉,屏蔽
同样不能被忽略,捕捉,屏蔽的信号还有9号信号
只能执行默认动作
所谓捕捉,就是捕捉处理,在该信号发生时执行一些特定动作,比如自己定义的函数
管道
匿名管道
用于有父子关系,家族关系的,fork出来的进程之间的通信
管道需要创建于fork函数执行之前
这样才能复制内核中的打开文件表,具有相同的管道
因为管道本质是文件,匿名管道没有文件实体,只是存在于内核区的内存中而已
有名管道
无关系的进程,非fork出的进程之间的通信
eventfd,linux新特性
待补全
信号量
内存映射
将文件的一部分映射到某个进程的地址空间
其他打开该文件的进程就可以获取其中变化修改的内容
这不就是多个进程打开同一个文件?
共享内存
在虚拟地址空间的用户区中,设置一块可以多个进程共享的内存,共享内存开辟在堆区和栈区之间
相比其他如信号,管道等方式,这种方式在通信的时候,由于该共享内存不在内核区,无需内核的介入,所以效率会更高
但,多进程访问又会是新的问题,需要并发控制,加锁
linux 下用ipcs
命令查询共享内存的信息
ipcs -a 可以查询共享内存,消息队列,信号量数组
0664是设置权限,创建共享内存,如果只是获取一块已经创建好的,则不需要
shmctl删除是删除不与任何进程关联的内存,如果还有进程尚未与该内存分离,尚在使用,则删除不了,只做个标记,等所有进程都不使用该内存,就会删除
shmctl标记删除,可以多个进程调用
这段只是记录下用法,如果直接用这段代码,刚创建的共享内存就会马上释放,因为没有别的进程在使用
消息队列
rabbitmq?这样和网络通信有什么区别?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?