概述:
过程间通信(IPC,Inter-Process Communication),指至多两个过程或线程间传送数据或信号的一些技术或办法。过程是计算机系统分配资源的最小单位(过程是分配资源最小的单位,而线程是调度的最小单位,线程共用过程资源)。每个过程都有本人的一部分独立的系统资源,彼此是隔离的。为了能使不同的过程相互拜访资源并进行协调工作,才有了过程间通信。
次要办法:
<font color=”LightSeaGreen”>管道:</font>
分为两种,
软管道: 如 ps -ef | grep xxxx,
硬管道:
<font color=”LightSeaGreen”> 音讯队列:</font>
内核创立一个音讯队列, 操作系统中的多个过程都能够操作这个音讯队列. 能够向其发送音讯, 也可从中接管音讯.
<font color=”LightSeaGreen”> 共享内存:</font>
每个过程都有一个虚拟内存地址和物理内存地址的映射, 个别两个过程的映射的物理内存地址是不同的, 共享内存即是将其映射的物理内存地址变成一样的. 这样两个过程就能够拜访雷同的物理内存, 也就能够实现过程之间的通信.
<font color=”LightSeaGreen”> 套接字:</font>
十分常见, 如通过 3306 端口拜访某个近程 mysql 服务, 我拜访 mysql 的这个过程, 和近程的这个 mysql 服务的过程之间的通信, 就是通过 3306 端口创立的 TCP 的套接字.
如果是拜访本机的 mysql 服务, 则不会走 TCP 套接字, 而是走 Linux 底层的套接字
<font color=”LightSeaGreen”> 信号量:</font>
相似一个计数器. 管制多个过程对一个共享资源的拜访.
<font color=”LightSeaGreen”> 信号:</font>
一个过程能够向另一个过程发送一个信号. 通过 kill -l
指令能够列出所有的信号
(64 种死法 …)
Linux 中的信号 大多数作用是把一个过程杀死, 于是叫 kill 了..
当 tail -f xxx 文件
时, 是会始终是阻塞. 如何完结? 个别会按ctrl+c
,
其实该命令就是以后的 shell($$
能够看到以后 shell 的 pid), 向 tail -f
过程发送了一个信号, 该信号值是 2, 即SIGINT
kill -9 pid
, 9 号信号是 SIGKILL.
如果不加, 则默认 15 号信号SIGTERM
(即 Terminal)
9 号信号即 kill 信号是不能被捕获的, 必须强制进行. 其余信号能够在程序中捕捉到.
ctrl+c : SIGINT
kill 不带参数: SIGTERM
KILL -9: SIGKILL
各个编号的含意, 可参见
linux kill -l 信号列表
本文由 mdnice 多平台公布