zoukankan      html  css  js  c++  java
  • Linux_进程之间的通信

    一、进程间的通信

    1️⃣:进程间通信(IPC:Inter Process Communication)

    2️⃣:进程之间通信方式:

    • 同一主机
      • 共享内存
      • 信号:Signal
    • 不同主机
      • rpc:remote procecure call
        • 基于socket实现进程间通信

    二、使用信号控制进程

    1️⃣:信号是传递至进程的软件中断。信号向执行中的程序报告事件

    2️⃣:生成信号的事件可以是错误或外部事件(如I/O请求或计时器过期),或者来自于明确请求(如使用信号发送命令)

    3️⃣:通过短名称(HUP)或正确名称(SIGHUP)指代信号:

    • 指定一个信号的方法:
      • 信号号码(数字标识):kill -1
      • 信号完整名称:kill -SIGKILL
      • 信号简写名称:kill -TERM或kill -KILL或kill -INT或kill -HUP

    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   //修改刷新时间间隔
    
  • 相关阅读:
    ValueError: max() arg is an empty sequence
    链接到镜像
    SparkStreaming+Kafka
    软件质量六大属性—
    架构之美3
    架构之美2
    架构之美-读书笔记之一
    机器学习四正则化(Regularization)
    机器学习三--各种差
    机器学习系列(二)——回归模型
  • 原文地址:https://www.cnblogs.com/itwangqiang/p/13473695.html
Copyright © 2011-2022 走看看