Linux_进程之间的通信
一、进程间的通信
1️⃣:进程间通信(IPC:Inter Process Communication)
2️⃣:进程之间通信方式:
- 同一主机
- 共享内存
- 信号:Signal
- 不同主机
- rpc:remote procecure call
- 基于socket实现进程间通信
- rpc:remote procecure call
二、使用信号控制进程
1️⃣:信号是传递至进程的软件中断。信号向执行中的程序报告事件
2️⃣:生成信号的事件可以是错误或外部事件(如I/O请求或计时器过期),或者来自于明确请求(如使用信号发送命令)
3️⃣:通过短名称(HUP)或正确名称(SIGHUP)指代信号:
- 指定一个信号的方法:
- 信号号码(数字标识):kill -1
- 信号完整名称:kill -SIGKILL
- 信号简写名称:kill -TERM或kill -KILL或kill -INT或kill -HUP
- 信号号码(数字标识):kill -1
4️⃣:进程管理信号:
- 1 HUP 挂起 让一个进程不用重启就可以重读配置文件,并让新的配置信息生效
- 2 INT 键盘中断 中断一个前台进程。ctrl+c就是用的SIGINT信号
- 9 KILL 中断,无法拦截 导致立即终止程序。无法被拦截、忽略或处理
- 15(默认值) TERM 终止 导致程序终止。和SIGKILL不同,可以被拦截、忽略或处理。要求程序终止的友好方式,允许自我清理
5️⃣:用户可以中断自己的进程,但只有root才能终止由其他人拥有的进程
6️⃣:kill命令根据ID向进程发送信号。虽其名称为kill,但该命令可用于发送任何信号,而不仅仅是终止程序的信号
7️⃣:示例
//显示所有可用的信号(可使用man 7 signal查看帮助信息)
[root@localhost ~]# kill -l
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
三、监控进程活动
1、IO负载
1️⃣:负载平均值代表一段时间内感知的系统负载。Linux通过预期服务等待时间的表示来实施平均负载计算
2️⃣:Linux不仅计算进程数,也作为独立的任务计算线程数。运行中线程和等待I/O资源的线程的CPU请求队列对应于R和D进程状态。等待I/O包括处于睡眠而等待预期磁盘和网络响应的任务
3️⃣:负载数属于全局计数器计算,是所有CPU的总和数。由于从睡眠返回的任务可能会重新调度到不同的CPU,难以精确的每CPU计数,但累计数的准确度可以保障。显示的平均负载代表所有的CPU
4️⃣:查看CPU核心数
//查看cpu核心数
[root@localhost ~]# grep 'model name' /proc/cpuinfo
model name : Intel(R) Pentium(R) CPU 4415U @ 2.30GHz
model name : Intel(R) Pentium(R) CPU 4415U @ 2.30GHz
5️⃣:由于具有空闲CPU的系统可能会因为磁盘或网络资源忙而遇到很长时间的等待,因此Linux负载平均值中包含了对I/O的考量
6️⃣:使用top、uptime查看负载平均值的情况
[root@localhost ~]# uptime
09:25:08 up 21 min, 4 users, load average: 0.00, 0.00, 0.00 //此处的load average就表示负载平均值,这三个值代表最近1、5和15分钟的负载情况。
[root@localhost ~]# top
top - 09:26:24 up 23 min, 4 users, load average: 0.00, 0.00, 0.00
Tasks: 219 total, 1 running, 218 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.2 hi, 0.2 si, 0.0 st
MiB Mem : 1965.1 total, 1405.6 free, 260.4 used, 299.1 buff/cache
MiB Swap: 2096.0 total, 2096.0 free, 0.0 used. 1545.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2183 root 20 0 64220 4864 3964 R 0.3 0.2 0:00.08 top
1 root 20 0 178784 13560 8556 S 0.0 0.7 0:04.23 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 20 0 0 0 0 I 0.0 0.0 0:00.69 kworker/0:0-xfs-cil/dm-0
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:00.12 ksoftirqd/0
10 root 20 0 0 0 0 I 0.0 0.0 0:00.52 rcu_sched
11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
...............
7️⃣:其他相关说明:
- 将显示的负载平均值除以系统中的逻辑CPU数。当值低于1表示资源利用率较好,等待时间很短。当值高于1表示资源饱和,而且有一定的服务等待时间
- 空闲CPU队列的负载数为0。每个就绪和等待的线程使计数增加1。总队列数为1时,资源(CPU、磁盘或网络)正在使用中,但没有请求把时间花在等待上
- 增加的请求数会累积该计数,但由于许多请求可以在时限内处理,资源使用率会很高,而等待时间则不会。
- 因为磁盘或网络资源忙碌等待I/O而处于睡眠的进程包含在该计数内,而且使负载平均值增大。虽然不能表示CPU使用率,队列数依然表明用户和程序正在等待资源服务
- 在资源饱和前,平均负载将保持在1以下,因为几乎不会在队列中发现等待的任务。只有资源饱和导致请求留在排队状态并且被负载计算例程计数时,负载平均才会增大
- 当资源使用率接近100%时,每个增加的请求将开始遭遇服务等待时间。
2、实时进程监控
1️⃣:top用于实现全屏动态显示系统信息
top
-d //设置延迟时长,top -d 1表示每隔1秒刷新一次,默认每隔5秒刷新
-b //批模式翻屏显示,默认只实时显示一屏,若要显示后面的进程信息则可使用-b选项,与-n #合用,可指定显示翻#屏 [root@localhost ~]# top
top - 09:29:48 up 26 min, 4 users, load average: 0.00, 0.00, 0.00
Tasks: 219 total, 1 running, 218 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 3.1 sy, 0.0 ni, 96.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1965.1 total, 1405.4 free, 260.6 used, 299.1 buff/cache
MiB Swap: 2096.0 total, 2096.0 free, 0.0 used. 1544.8 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2184 root 20 0 64220 4812 3908 R 6.7 0.2 0:00.01 top
1 root 20 0 178784 13560 8556 S 0.0 0.7 0:04.24 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 20 0 0 0 0 I 0.0 0.0 0:00.69 kworker/0:0-xfs-cil/dm-0
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
...............
load average:1分钟,5分钟,15分钟
load average //CPU队列中等待运行的任务的个数 cpu(s):多颗CPU平均负载,按1键显示每颗CPU平均负载
us //表示用户空间;
sy //表示内核空间;
ni //表示调整nice值,CPU占用的比率;
id //表示空闲百分比;
wa //表示等待IO完成所占据的时间百分比;
hi //表示hard interrupt,硬件中断占据的时间百分比;
si //表示软中断占据的时间百分比;
st //表示steal,被虚拟化技术偷走的时间(比如运行虚拟机) PR //优先级
NI //nice值
VIRT //虚拟内存集
RES //常驻内存集
SHR //共享内存大小
S //进程状态
参数注释
2️⃣:top命令交互式子命令
//top命令交互式子命令:
M //根据驻留内存大小进行排序,默认根据CPU百分比排序
P //根据CPU使用百分比进行排序
T //根据累计时间(占据CPU时长)进行排序
l //是否显示平均负载和启动时间
t //是否显示进程和CPU状态相关信息
m //是否显示内存相关信息
c //是否显示完整的命令行信息
q //退出top命令
k //终止某个进程
1 //显示所有CPU的信息
s //修改刷新时间间隔
Linux_进程之间的通信的更多相关文章
- c# IPC实现本机进程之间的通信
IPC可以实现本地进程之间通信.这种用法不是太常见,常见的替代方案是使用wcf,remoting,web service,socket(tcp/pipe/...)等其他分布式部署方案来替代进程之间的通 ...
- python全栈开发 * 进程之间的通信,进程之间数据共享 * 180726
进程之间的通信(IPC)队列和管道一.队列 基于管道实现 管道 + 锁 数据安全(一).队列 队列遵循先进先出原则(FIFO) 多用于维护秩序,买票,秒杀 队列的所有方法: put()(给队列里添加数 ...
- day34——僵尸进程和孤儿进程、互斥锁、进程之间的通信
day34 僵尸进程和孤儿进程 基于unix环境(linux,macOS) 主进程需要等待子进程结束之后,主进程才结束 主进程时刻监测子进程的运行状态,当子进程结束之后,一段时间之内,将子进程进行回收 ...
- Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信
Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...
- 进程之间的通信(multiprocess.Queue)
一.进程间通信 进程之间的数据是相互隔离的,例如 from multiprocessing import Process def task(): global n # 声明全局变量 n = 999 p ...
- 《Python》进程之间的通信(IPC)、进程之间的数据共享、进程池
一.进程间通信---队列和管道(multiprocess.Queue.multiprocess.Pipe) 进程间通信:IPC(inter-Process Communication) 1.队列 概念 ...
- python进程之间的通信——Queue
我们知道进程之间的数据是互不影响的,但有时我们需要在进程之间通信,那怎么办呢? 认识Queue 可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息 ...
- UNIX标准C - 进程之间的通信
一.基本概念 进程间通信IPC:进程之间交换数据的过程叫进程间通信 进程间同性的方式: 简单的进程间的通信: 命令行:父进程通过exec函数创建子进程是可以附加一些数据 环境变量表:父进程通过exec ...
- python网络编程中互斥锁与进程之间的通信
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
随机推荐
- [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.4 规范电路模型
7.4 规范电路模型 在讨论了推导开关变换器交流等效电路模型的几种方法后,让我们先停下来,说明下这些结果.所有的在 CCM下以PWM工作的DC-DC变换器都具有相似的基本功能.首先,他们在理想情况下, ...
- 前端面试回顾(1)---javascript的面向对象
前言 前一阵面试,过程中发现问到一些很基础的问题时候,自己并不能很流畅的回答出来.或者遇到一些基础知识的应用,由于对这些点理解的不是很深入,拿着笔居然什么都写不出来,于是有了回顾一下这些基础知识的想法 ...
- Horovod-Usage
Usage 代码中要包含以下6步: 初始化 Run hvd.init() to initialize Horovod. 将每个GPU固定到单个进程以避免资源争用. 一个线程一个GPU,设置到 loca ...
- Day09_41_集合_Set
Set集合 Set集合 - Set集合的特点是无序不可重复.Set集合类似于一个罐子,程序可以依次把多个对象"丢进"Set集合,而Set集合通常不能记住元素的添加顺序. - Set ...
- C#中普通缓存的使用
缓存的概念及优缺点在这里就不多做介绍,当然缓存包含多种有普通缓存.客户端缓存.DNS缓存.反向代理缓存以及分布式缓存等等.今天主要聊一聊C#通过编码来实现普通的缓存.话不多说直接上代码. 一.首先,新 ...
- 【参数校验】 自定义校验器 (实现ConstraintValidator)
日常工作中写接口时,往往需要校验前端传来的枚举状态码,例如"1","2"等等, 这里使用java 303规范的参数校验框架封装一个自定义参数校验器: /** * ...
- LA3971组装电脑
题意: 你有b块钱,想要组装一台电脑,给你提供一些零件,每种零件提供一个或几个,组装电脑的前提是每种零件只能也必须选择一个,每种零件都有自己的种类,名字,价格,还有品质,要求是在能配成电脑 ...
- DVWA之XSS
XSS XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强 ...
- hdu3374最小表示法+KMP
题意: 给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理) ...
- Node-Web应用框架Express
Express 是 node.js Web应用框架, 帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网站. Express 框架核心特性: ...