进程管理2020/11/24作业

Linux进程管理(二)

六、进程间通信

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

进程间通信方式:

  • 同一主机:

    • 共享内存

    • 信号:Signal

  • 不同主机

    • rpc:remote procecure call
      • 基于socket实现进程间通信

七、使用信号控制进程

信号是传递至进程的软件中断。信号向执行中的程序报告事件。生成信号的事件可以是错误或外部事件(如I/O请求或计时器过期),或者来自于明确请求(如使用信号发送命令)

下表列出了系统管理员用于日常进程管理的基本信号。请通过短名称(HUP)或正确名称(SIGHUP)指代信号。

指定一个信号的方法:

  • 信号号码(数字标识):kill -1
  • 信号完整名称:kill -SIGKILL
  • 信号简写名称:kill -TERM或kill -KILL或kill -INT或kill -HUB

基本进程管理信号:

信号编号 ID短名称定义用途
1HUP挂起让一个进程不用重启就可以重读配置文件,并让新的配置信息生效
2INT键盘中断中断一个前台进程。ctrl+c就是用的SIGINT信号
9KILL中断,无法拦截导致立即终止程序。无法被拦截、忽略或处理
15 默认值TERM终止导致程序终止。和SIGKILL不同,可以被拦截、忽略或处理。要求程序终止的友好方式,允许自我清理

用户可以中断自己的进程,但只有root才能终止由其他人拥有的进程。

kill命令根据ID向进程发送信号。虽其名称为kill,但该命令可用于发送任何信号,而不仅仅是终止程序的信号

//显示所有可用的信号
[root@pyhptl ~]# 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

//killall后面跟进程名,表示将匹配到的以进程名为名的进程全部杀死
[root@pyhptl ~]# ps -ef|grep sleep
root       1906   1578  0 16:10 pts/1    00:00:00 sleep 1000
root       1907   1578  0 16:10 pts/1    00:00:00 sleep 1010
root       1930   1578  0 16:10 pts/1    00:00:00 sleep 1022
root       1932   1578  0 16:10 pts/1    00:00:00 grep --color=auto sleep
[root@pyhptl ~]# killall sleep
[1]   Terminated              sleep 1000
[2]-  Terminated              sleep 1010
[3]+  Terminated              sleep 1022
[root@pyhptl ~]# ps -ef|grep sleep
root       1936   1578  0 16:11 pts/1    00:00:00 grep --color=auto sleep
//killall后面跟进程名的pid号
[root@pyhptl ~]# pidof sleep
1937
[root@pyhptl ~]# jobs
[1]+  Running                 sleep 1111 &
[root@pyhptl ~]# kill 1937
[root@pyhptl ~]# jobs
[1]+  Terminated              sleep 1111

八、监控进程活动

1.IO负载

负载平均值代表一段时间内感知的系统负载。Linux通过预期服务等待时间的表示来实施平均负载计算。

Linux不仅计算进程数,也作为独立的任务计算线程数。运行中线程和等待I/O资源的线程的CPU请求队列对应于R和D进程状态。等待I/O包括处于睡眠而等待预期磁盘和网络响应的任务。

负载数属于全局计数器计算,是所有CPU的总和数。由于从睡眠返回的任务可能会重新调度到不同的CPU,难以精确的每CPU计数,但累计数的准确度可以保障。显示的平均负载代表所有的CPU。

//查看cpu核心数
[root@pyhptl ~]# grep 'model name' /proc/cpuinfo
model name	: Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz
[root@pyhptl ~]# grep 'process' /proc/cpuinfo
processor	: 0

一些UNIX系统仅考虑CPU使用率或运行队列长度来指示系统负载。由于具有空闲CPU的系统可能会因为磁盘或网络资源忙而遇到很长时间的等待,因此Linux负载平均值中包含了对I/O的考量。遇到负载平均值很高但CPU活动很低时,请检查磁盘和网络活动。

Linux中可以使用topuptime显示负载平均值的情况。

[root@pyhptl ~]# uptime
 16:32:44 up  2:33,  3 users,  load average: 0.00, 0.01, 0.05
[root@pyhptl ~]# uptime
 16:33:41 up  2:34,  3 users,  load average: 0.13, 0.04, 0.05
[root@pyhptl ~]# uptime
 16:33:49 up  2:34,  3 users,  load average: 0.48, 0.12, 0.08
[root@pyhptl ~]# uptime
 16:34:01 up  2:34,  3 users,  load average: 0.93, 0.25, 0.12
[root@pyhptl ~]# uptime
 16:34:05 up  2:34,  3 users,  load average: 0.93, 0.25, 0.12
//此处的load average就表示负载平均值,这三个值代表最近1、5和15分钟的负载情况。

将显示的负载平均值除以系统中的逻辑CPU数。当值低于1表示资源利用率较好,等待时间很短。当值高于1表示资源饱和,而且有一定的服务等待时间。

空闲CPU队列的负载数为0。每个就绪和等待的线程使计数增加1。总队列数为1时,资源(CPU、磁盘或网络)正在使用中,但没有请求把时间花在等待上。增加的请求数会累积该计数,但由于许多请求可以在时限内处理,资源使用率会很高,而等待时间则不会。

因为磁盘或网络资源忙碌等待I/O而处于睡眠的进程包含在该计数内,而且使负载平均值增大。虽然不能表示CPU使用率,队列数依然表明用户和程序正在等待资源服务。

在资源饱和前,平均负载将保持在1以下,因为几乎不会在队列中发现等待的任务。只有资源饱和导致请求留在排队状态并且被负载计算例程计数时,负载平均才会增大。当资源使用率接近100%时,每个增加的请求将开始遭遇服务等待时间。

2.实时进程监控

top用于实现全屏动态显示系统信息

//常用选项:
    -d      //设置延迟时长,top -d 1表示每隔1秒刷新一次,默认每隔5秒刷新
    -b      //批模式翻屏显示,默认只实时显示一屏,若要显示后面的进程信息则可使用-b选项,与-n #合用,可指定显示翻#屏      
[root@pyhptl ~]# top -b -n 1
top - 12:16:09 up 3 min,  2 users,  load average: 0.02, 0.04, 0.03
Tasks: 102 total,   1 running, 101 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 11.8 sy,  0.0 ni, 88.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995748 total,   710836 free,   169940 used,   114972 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   693036 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
     1 root      20   0  127960   6528   4104 S  0.0  0.7   0:01.73 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
     5 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kworker/u256:0
     6 root      20   0       0      0      0 S  0.0  0.0   0:00.06 ksoftirqd/0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S  0.0  0.0   0:00.43 rcu_sched
    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain
    
    
    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       //进程状态


//top命令交互式子命令:
    M   //根据驻留内存大小进行排序,默认根据CPU百分比排序
    P   //根据CPU使用百分比进行排序
    T   //根据累计时间(占据CPU时长)进行排序
    l   //是否显示平均负载和启动时间
    t   //是否显示进程和CPU状态相关信息
    m   //是否显示内存相关信息
    c   //是否显示完整的命令行信息
    q   //退出top命令
    k   //终止某个进程
    1   //显示所有CPU的信息
    s   //修改刷新时间间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值