RHEL8.0快速入门系列笔记--进程的检测与控制(十三)

RHEL8.0快速入门系列笔记–进程的检测与控制(十三)

1、认识管道
(一)什么是管道
管道:指在类UNIX系统中,进程之间通讯的一种方式或机制。
管道,也指一种特殊文件,交管道文件
(二)管道分类
[1] 匿名管道
匿名管道:顾名思义,就是没有名字的管道,常常用于父子关系的进程之间通讯一种方式。
匿名管道,在bash中,用符号“|”表示
匿名管道作用:将上一个命令所执行的结果(标准输出)作为下一个命令的标准输入。
[2] 命名管道

  • 命名管道,顾名思义,就是有名字的管道,既可以用于任何进程之间通讯。
  • 命名管道,可以使用mkfifo命令创建。
[root@redhat ~]# mkfifo /tmp/p_file    			//创建一个命令管道文件
[root@redhat ~]# file /tmp/p_file    		   //判断该文件的类型
/tmp/p_file:fifo(named pipe)
[root@redhat ~]# ll /tmp/p_file
prw-rw-r--. 1 root root 0 Mar 10 15:28 /tmp/p_file

[root@redhat ~]# tty
/dev/pts/1
[root@redhat ~]#echo "helloworld" > /tmp/p_file
[root@redhat ~]# tty
/dev/pts/2
[root@redhat ~]# cat /tmp/p_file

(三)引申xargs命令
场景:找出某些文件将其删除或者找出某个进程将它结束,如何实现?

需求:
在/tmp/dir1目录里有一个目录aaa和5个文件file1-file5,现在要删除该目录下的file1-file5

以下命令不能删除:
find /tmp/dir1 -name file* | rm -rf
但是,管道|后面加上xargs就可以删除:
find /tmp/dir1 -name file* |xargs rm -rf

以下命令可以成功删除
find /tmp/dir1 -type f -exec rf -f {} \;
find /tmp/dir1 -type -f -delete

xargs:将上一条命令所执行的结果作为下一条命令的参数
2、进程概述
(一)什么是进程
进程:有程序产生,是正在运行的程序,或者说是已启动的可执行程序的运行实例
进程,具有自己的生命周期和各种不同的状态。
引申:什么事线程?
线程:也称为轻量级进程,线程是进程的执行单元,一个进程可以有多个线程。线程不拥有资源,它与父进程的其他线程共享进程所拥有的资源,线程的执行是抢占式的
(二)进程有什么特点

  • 独立性
    进程是系统中独立存在的实体,它可以拥有自己的独立资源,每一个进程都有自己的私有地址空间。
  • 动态性
    进程与程序的区别在于,程序只是一个静态的指令集和,而进程是一个正在系统中活动的指令集合;进程具有自己的生命周期和各种不同的状态。
  • 并发性
    多个进程可以在单个处理器上并发执行,多个进程之间不会互相影响。
    (三)进程生命周期
    父进程,复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新锦成分配一个唯一的进程ID(PID),满足跟踪安全性之需。PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代:(Centos5/6:init Redhat7/8: systemd)
    子进程,继承父进程的安全性身份,过去和当前的文件描述符,端口和资源特权,环境变量,以及程序代码。随后,子进程exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发生(exit)信号请求,在退出时,子进程会关闭或丢失了其资源环境,剩余的部分称之为僵停(僵尸进程)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码
    在这里插入图片描述
    3、进程信息查看
    (一)静态查看ps命令
ps -ef
ps -eF
ps -ely
ps aux
ps auxf

a 显示当前终端下的所有进程,包括其他用户的进程
u 显示进程拥有者,状态,资源占用等详细信息(注意“-”和无“-”的区别)
x 显示没有控制终端的进程。通常与a这个参数一起使用,可列出较完整的信息
o 自定义打印内容
-e 显示所有进程
-f 完整输出显示进程之间的父子关系
-l 较长、较详细的将该进程的信息列出   

(二)动态查看top命令
第一部分:统计信息

[root@RedHat8 ~]# top
top - 22:12:04 up 13:32,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 287 total,   1 running, 286 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.1 hi,  0.0 si,  0.0 st
MiB Mem :   3758.6 total,   2152.3 free,    853.4 used,    752.9 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   2631.2 avail Mem 

关注load average:系统1分钟、5分钟、15分钟的平均负载,判断一个系统负载是否偏高需要计算单核CPU的平均负载,如下图,一般以1以内为比较合适的值。偏高说明有比较多的进程在等待使用CPU资源。

计算方法:
平均负载/逻辑cpu数量

物理cpu(N路):主板上cpu插槽个数
CPU核数:一块CPU上面能处理数据芯片的数量
逻辑cpu:一般情况,一颗cpu可以有多核,加上intel的超线程技术(HT),可以在逻辑上在分一倍数量的cpu
逻辑CPU数=物理cpu数量 x cpu核数,如果支持HT更多。

查看物理cpu的个数
# cat /proc/cpuinfo | grep "physical id" | sort |uniq|wc -l
查看逻辑CPU个数
# cat /proc/cpuinfo | grep "processor" | wc -l
查看cpu几核
# cat /proc/cpuinfo | grep "cores"|uniq
  • top命令常用的按键命令
    在top的执行过程中,还可以使用一下按键命令:
h|?帮助
M	按内容	的使用排序
P   按CPU使用排序
T   按该进程使用的CPU时间累积排序
k   给某个PID一个信号(signal),默认值是信号1s
l	显示所有cpu的负载
s   改变两次刷新之间的时间,默认5秒
q   退出程序

N   以PID的大小排序
R   对排序进行反转
f   自定义显示字段
r  重置安排一个进程的优先级 
  • top命令的常用选项
-d   后面可以接秒数,指定每两次屏幕信息刷新之间的时间间隔
-p   指定某个进程来进行监控
-u   指定进程的拥有者
-b -n 以批处理方式执行top命令,通常使用数据流量定向,将处理结果输出为文件
[root@RedHat8 ~]# top -d 1
[root@RedHat8 ~]# top -d 1 -p 10126
[root@RedHat8 ~]# top -d 1 -u apache			查看指定用户的进程
[root@RedHat8 ~]# top -d 1 -b -n 2 > top.txt		将2次top信息写入到文件

4、进程控制
(一)进程的优先级控制
[1] 调整正在运行进程的优先级(renice)
(1) 使用top按“r”来调整

优先级的范围
-20--19  数字越低,优先级越高,系统会按照更多的cpu时间给该进程

(2) 命令行使用renice调整

sleep命令没有时间意义,延迟(睡眠)5000秒
[root@redhat ~]# sleep 5000 &
[1] 2544
sleep程序已经运行,通过renice命令调整优先级
[root@redhat ~]# renice -20 2544
2544: old priority 0,new priority -20

[2] 程序运行时指定优先级(nice)

启动进程时,同常会继承父进程的nice级别,默认为0,
# nice -n -S sleep 6000 &
# ps axo command,pid,nice | grep sleep

(二)进程的运行状态控制
[1] 如何控制进程状态?
用户通过给进程发送信号来控制进程状态。
[2] 常见的信号有哪些?

信号编号 信号名 解释说明
1 SIGHUP 默认终止控制终端进程(可用来重新加载配置文件,平滑重启)
2 SIGINT 键盘中断(ctrl+c)
3 SIGQUIT 键盘退出(ctrl+\),一般指程序异常产生core文件
9 SIGKILL 强制终止
15 SIGTERM 正常结束
18 SIGCONT 继续
19 SIGSTOP 停止
20 SIGTSTP 暂停(ctrl+z)

[3] 如何给进程发送信号

kill [信号] 进程PID
kill all
pkill

给进程号为15621的进程发送默认信号(-15可以省略)
kill -15 15621
给stu1用户的所有进程发送9号信号(结束stu1的所有进程),根据用户结束进程
pkill -9 -u stu1
给进程名为vsftpd的进程发送9号信号(根据进程名结束进程)
pkill -9 vsftpd

(三)进程其他控制命令

# jobs	查看当前终端后台的进程
# fg	把后台进程放到前台来运行
# bg	把后台暂停的进程放到后台运行
# fg %1	将作业1调回到前台
# bg %2	将后台编号为2的进程恢复运行状态

# kill -20 %3	给job编号为3的进程发送信号
# firefox www.baidu.com &	打开浏览器放到后台运行

kill 信号 进程编号  或者 job编号
pkill 信号 进程名字
killall 信号 进程名字

fg %2	把后台job编号为2的进程放到前台来运行
bg %3	把后台job编号为3的进程放到后台继续运行

总结
1.如何查看进程先关信息
[1] 静态查看ps

ps
ps -ef | grep httpd
ps -eF

ps aux
ps auxf|grep httpdd
ps axo user,pid,nice

[2] 动态查看top

# top
P
M
T
r
k

2.如何控制进程状态或优先级
[1] 设置进程优先级(-20-19)

  • renice调整正在运行进程优先级
  • nice指定程序运行时的优先级

[2] 控制进程状态

  • 常见信号(kill -l)9 15 18 20 1
  • 使用哪些命令发信号(kill/pkill/killall)
  • 进程前台和后台 运行(jobs/fg/bg)
发布了13 篇原创文章 · 获赞 1 · 访问量 158

猜你喜欢

转载自blog.csdn.net/weixin_42961863/article/details/104201329
今日推荐