文章插图
Linux 进程间通信Linux 进程间的通信机制通常被称为 Internel-Process communication,IPC下面我们来说一说 Linux 进程间通信的机制,大致来说,Linux 进程间的通信机制可以分为 6 种
文章插图
下面我们分别对其进行概述
信号 signal信号是 UNIX 系统最先开始使用的进程间通信机制,因为 Linux 是继承于 UNIX 的,所以 Linux 也支持信号机制,通过向一个或多个进程发送异步事件信号来实现,信号可以从键盘或者访问不存在的位置等地方产生;信号通过 shell 将任务发送给子进程 。
你可以在 Linux 系统上输入 kill -l 来列出系统使用的信号,下面是我提供的一些信号
文章插图
进程可以选择忽略发送过来的信号,但是有两个是不能忽略的:SIGSTOP 和 SIGKILL 信号 。SIGSTOP 信号会通知当前正在运行的进程执行关闭操作,SIGKILL 信号会通知当前进程应该被杀死 。除此之外,进程可以选择它想要处理的信号,进程也可以选择阻止信号,如果不阻止,可以选择自行处理,也可以选择进行内核处理 。如果选择交给内核进行处理,那么就执行默认处理 。
操作系统会中断目标程序的进程来向其发送信号、在任何非原子指令中,执行都可以中断,如果进程已经注册了新号处理程序,那么就执行进程,如果没有注册,将采用默认处理的方式 。
例如:当进程收到 SIGFPE 浮点异常的信号后,默认操作是对其进行 dump(转储)和退出 。信号没有优先级的说法 。如果同时为某个进程产生了两个信号,则可以将它们呈现给进程或者以任意的顺序进行处理 。
下面我们就来看一下这些信号是干什么用的
- SIGABRT 和 SIGIOT
- SIGALRM 、 SIGVTALRM、SIGPROF
- SIGBUS
- SIGCHLD
- SIGCONT
- SIGFPE
- SIGUP
- SIGILL
- SIGINT
- SIGKILL
僵尸进程无法杀死,因为僵尸进程已经死了,它在等待父进程对其进行捕获
处于阻塞状态的进程只有再次唤醒后才会被 kill 掉
init 进程是 Linux 的初始化进程,这个进程会忽略任何信号 。
SIGKILL 通常是作为最后杀死进程的信号、它通常作用于 SIGTERM 没有响应时发送给进程 。
- SIGPIPE
- SIGPOLL
- SIGRTMIN 至 SIGRTMAX
- SIGQUIT
- SIGSEGV
推荐阅读
- .so Linux下动态库和静态库(.a) 的区别
- Linux中/etc/passwd配置文件详解
- linux后台开发中避免僵尸进程的方法总结
- 用 testdisk 恢复 Linux 上已删除的文件
- 使用 GNU bc 在 Linux Shell 中进行数学运算
- 谈谈如何学习Linux
- Redis源码剖析之SDS
- 如何获取Linux或者macOS系统版本相关信息
- linux异步IO编程实例分析
- Linux和Windows两种风格的操作系统,创建线程的方式有何不同?