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网络编程中互斥锁与进程之间的通信
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
随机推荐
- ABP 适用性改造 - 添加 API 版本化支持
Overview 在前面的文章里有针对 abp 的项目模板进行简化,构建了一个精简的项目模板,在使用过程中,因为我们暴露的 api 需要包含版本信息,我们采取的方式是将 api 的版本号包含在资源的 ...
- SQL Server 实用语句
创建临时表 #Test CREATE TABLE #Test( ID INT, Name VARCHAR(50) ) INSERT INTO #Test( ID, Name ) VALUES ( 1, ...
- 它来了!!!有史以来第一个64位Visual Studio(2022)预览版将在今夏发布!
美国时间2021年4月19日,微软产品研发部一位负责人Amanda Silver在其博客上发布一则<Visual Studio 2022>的消息,表示将在今年(2021年)夏天发布Visu ...
- Day12 _63_获取当前线程对象
给线程起名 * 1. Thread.currentThread(); 可以获取到当前线程对象,出现在哪就是获取哪个线程. * 2. thread.setName(); 给该线程起名字 * 3. thr ...
- 文件上传bypass jsp内容检测的一些方法
bx2=冰蝎2 前段时间渗透遇到了个检测jsp内容的,然后发现全unicode编码就可以绕过,但是对bx2马进行全编码他出现了一些错误,我尝试简单改了下,日站还是bx2操作舒服点 检测内容的话,这样直 ...
- 12- APP接口测试以及接口文档的分析
什么是接口? 为什么要做接口测试? 接口测试流程 需求评审 需求分析 接口用例设计 执行测试用例 bug的定位于追踪 接口文档分析 接口文档分析:开发 内容: 1.接口名称 2.接口地址 3.支持方式 ...
- 病毒木马查杀实战第016篇:U盘病毒之逆向分析
比对脱壳前后的程序 我们这次所要研究的是经过上次的脱壳操作之后,所获取的无壳病毒样本.其实我们这里可以先进行一下对比,看看有壳与无壳的反汇编代码的区别.首先用IDA Pro载入原始病毒样本: 图1 可 ...
- hdu4975 行列和构造矩阵(dp判断唯一性)
题意: 和hdu4888一样,只不过是数据加强了,就是给你行列的和,让你构造一个矩阵,然后判断矩阵是否唯一. 思路: 构造矩阵很简单,跑一次最大流就行了,关键是判断矩阵的唯一性 ...
- POJ3762 时间段用k次
题意: 有n个任务,每个任务有自己的开始时间和结束时间,还有完成这个任务能获得的价值,然后每一天的同一个时刻只能执行一个任务,每个任务必须连续执行完成,最多可以工作m天,问这m天能获得的最 ...
- 【maven】You may use+to add a project ro to let the plugin find all pom.xml files...
错误显示 解决方法 点击pom.xml,再Add as Maven Project 如果还不能解决,点击idea的log 复制报错(技巧:可以先将idea.log删除,比较好定位) Caused by ...