RHEL的进程管理

目录

1.进程介绍

2.查看进程 

3.发送信号 

4.进程优先级 


1.进程介绍

在 Windows中打开任务管理器就可以查看到系统中的所有进程,如下图所示。
 
这里列出了系统中所有的进程,不过也可以使用命令行工具来查看进程。每个进程都会有一个 Process ID,简称为PID。

2.查看进程 

也可以使用ps命令来查看系统中的进程,当执行不加任何选项的ps命令时,显示的是当前终端的进程,命令如下。
[root@RHEL813 ~]# ps
    PID TTY          TIME CMD
   2029 pts/0    00:00:00 bash
   2297 pts/0    00:00:00 ps
[root@RHEL813 ~]# 

使用ps命令查看当前终端的进程,如图18-2所示。 

 

有很多进程不属于任何终端,这些进程都是后台进程。如图18-2所示,在终端1中运行了A、B两个进程,当在终端1中执行ps命令时只能看到终端1上的三个进程(包括ps本身),看不到其他终端及后台进程。如果想查看系统中的所有进程,就需要加上选项了。
基本上不同版本的UNIX系统上都有自己的ps命令,但是这些命令却没有一个统一的选项约定,Linux中的ps命令应尽可能地包括所有的这些选项以适应不同UNIX背景的人群。所以,Linux中 ps包括了UNIX风格和Linux风格的选项,最常见的用法包括ps aux 和 ps -ef。

ps aux可以列出系统中所有进程,如下图所示

因为ps aux显示内容太多,所以这里通过head只截取前11行,这里每列的含义如下。  

(1)USER:进程所属用户。
(2)PID:进程ID。
(3)%CPU:进程占用CPU百分比。
(4)%MEM:进程占用内存百分比。
(5)VSZ:虚拟内存占用大小(单位:KB)。
(6) RSS:实际内存占用大小(单位:KB)。
(7)TTY:终端类型。
(8)STAT:进程状态。
(9)START:进程启动时刻。
(10)TIME:进程运行时长。
(11)COMMAND:启动进程的命令

3.发送信号 

有时可能要关闭进程,单击右上角的【关闭】按钮就可以关闭正在运行的程序,不过有时这种方式是关闭不了的,如图18-6所示。

 

此时选择【关闭程序】选项,强制关闭此程序。 

关团一个正在运行的程序时,本质上是系统给此程序对
应的进程发送一个关闭信号。不同的关闭方式,信号是不一样的,查看系统有多少信号可以使用kill -l命令进行查看,如下图所示。

 

也可以使用kill命令手动给进程发送信号,这里介绍3个常用的信号:15号信号、9号信号和2号信号 
15号信号,当单击右上角的【关闭】按钮去关闭一个程序时,系统发送的就是15号信号,这也是默认信号。在命令行中使用kill命令时,如果不指定信号,则是15号信号。

在后台运行sleep命令,同时也显示了进程的PID,如下所示。  

 

可以看到,sleep进程的PID是2369。下面给这个进程发送一个9号信号,命令如下。  

 

2号信号,当我们按【Ctrl+C】组合键时,本质上就是发送了一个2号信号。运行 sleep命令,后面没有加&就是放在前台运行,命令如下。  

 

按【Ctrl+C】组合键会终止正在运行的程序,即对对应的进程发送2号信号。 

再次运行sleep命令,并把它放在后台运行,命令如下。 

[root@RHEL813 ~]# sleep 1000 &
[1] 2388
[root@RHEL813 ~]# 

这里sleep进程的PID是2388,给这个进程发送一个2号信号,命令如下 

[root@RHEL813 ~]# kill -2 2388
[root@RHEL813 ~]# 
[1]+  中断                  sleep 1000
[root@RHEL813 ~]# 

当一个程序关不掉时,需要强制关闭,此时可以对进程发送9号信号,命令如下。  

[root@RHEL813 ~]# sleep 1000 &
[1] 2405
[root@RHEL813 ~]# 
[root@RHEL813 ~]# kill -9 2405
[root@RHEL813 ~]# 
[1]+  已杀死               sleep 1000
[root@RHEL813 ~]# 

 这样就强制关闭了

使用kill命令后面需要跟上进程的PID,这里还需要查找出进程的PID,如果想直接杀死某个运行的程序,则可以使用killall命令。先在后台运行几个程序。
[root@RHEL813 ~]# sleep 1000 &
[1] 2423
[root@RHEL813 ~]# sleep 1000 &
[2] 2424
[root@RHEL813 ~]# sleep 1000 &
[3] 2425
[root@RHEL813 ~]# sleep 1000 &
[4] 2426
[root@RHEL813 ~]# 

 这里要杀死所有 sleep所对应的进程,命令如下。

[root@RHEL813 ~]# killall -9 sleep
[1]   已杀死               sleep 1000
[2]   已杀死               sleep 1000
[3]-  已杀死               sleep 1000
[root@RHEL813 ~]# 

4.进程优先级 

 

系统中所有的进程都要消耗CPU的资源,CPU 会为每个进程分配一个时间片,轮到某进程时CPU会处理这个进程的请求,时间片到期,则会把进程暂停放回队列等待下一轮的时间片。在同一颗CPU上如果运行了太多的程序就会导致CPU的资源不够,可以调整进程的优先级,让指定进程获取更多的资源,更优先地去执行
好比在驾校学车时,教练车就是CPU资源,每个学员就是一个个等待的进程。每个学员上车练习10分钟(时间片),10分钟过了之后就要下车让下一个学员上车练习,再次练习需要等待下一轮。如果学员太多,等待的时间就会很久。如果想多练习一会,可以让教练设置一下优先级,别人练习一次10分钟,我练习一次2小时。
进程的优先级由两个值决定:优先顺序(priority)优先级(niceness))。其中优先顺序由内核对它进行动态地更改,我们不需要做太多干预,对用户而言,只需要通过nice来修改。nice值的取值范围是 -20~19 ,nice值越小,进程就越优先执行。
多个进程如果运行在不同的CPU上是互不干扰的,不会发生抢资源的情况,进程只有运行在同一颗CPU上才会发生资源抢占的情况。所以,做实验时要确保多个进程是运行在同一颗CPU上的。首先查看一下CPU 的情况,命令如下。
[root@RHEL813 ~]# lscpu
架构:           x86_64
CPU 运行模式:   32-bit, 64-bit
字节序:         Little Endian
CPU:             2
在线 CPU 列表:  0,1
每个核的线程数: 1
每个座的核数:   2
座:             1
NUMA 节点:      1
厂商 ID:        GenuineIntel
BIOS Vendor ID:  GenuineIntel
CPU 系列:       6
型号:           141
型号名称:       11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
BIOS Model name: 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
步进:           1
CPU MHz:        2304.004
BogoMIPS:       4608.00
超管理器厂商:   VMware
虚拟化类型:     完全
L1d 缓存:       48K
L1i 缓存:       32K
L2 缓存:        1280K
L3 缓存:        24576K
NUMA 节点0 CPU: 0,1
标记:           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid movdiri movdir64b fsrm avx512_vp2intersect md_clear flush_l1d arch_capabilities
可以看到,现在有两颗CPU(一颗CPU有两个核被认为是两颗CPU),编号分别是0和1.。现在关闭1号CPU,命令如下
[root@RHEL813 ~]# echo "0" >> /sys/devices/system/cpu/cpu1/online 
[root@RHEL813 ~]# lscpu
架构:           x86_64
CPU 运行模式:   32-bit, 64-bit
字节序:         Little Endian
CPU:             2
在线 CPU 列表:  0
离线 CPU 列表:  1
每个核的线程数: 1
每个座的核数:   1
座:             1
NUMA 节点:      1
厂商 ID:        GenuineIntel
BIOS Vendor ID:  GenuineIntel
CPU 系列:       6
型号:           141
型号名称:       11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
BIOS Model name: 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
步进:           1
CPU MHz:        2304.004
BogoMIPS:       4608.00
超管理器厂商:   VMware
虚拟化类型:     完全
L1d 缓存:       48K
L1i 缓存:       32K
L2 缓存:        1280K
L3 缓存:        24576K
NUMA 节点0 CPU: 0
标记:           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid movdiri movdir64b fsrm avx512_vp2intersect md_clear flush_l1d arch_capabilities
[root@RHEL813 ~]# 
这样就可以看到1号CPU已经离线了,注意/sys/devices/system/cpu/cpu1/online中的值如果是0则表示CPU离线,如果是1则表示CPU在线。

下面运行两个cat进程,命令如下。 

[root@RHEL813 ~]# cat /dev/zero > /dev/null &
[1] 2518
[root@RHEL813 ~]# cat /dev/zero > /dev/null &
[2] 2519
[root@RHEL813 ~]# 

然后再打开一个终端用 top进行查看, 如下图所示

可以看到,两个cat进程消耗的CPU是差不多的,因为它们的nice值相同,可以平等地消耗CPU资源。下面使用renice修改进程2518的nice值,改为-10,命令如下。
[root@RHEL813 ~]# renice -n -10 2518
2518 (process ID) 旧优先级为 0,新优先级为 -10
[root@RHEL813 ~]# 
这样进程2518会比进程2519占用更多的CPU资源,再次到top中查看,结果如下图所示。

可以看到,2518占用的资源比2519多了很多。  

刚才讲nice值越小越可得到更多的CPU资源,越大越不容易抢到资源,这里改成最大值19,命令如下。
[root@RHEL813 ~]# renice -n 19 2518
2518 (process ID) 旧优先级为 -10,新优先级为 19
[root@RHEL813 ~]# 

然后再到 top中查看,结果如下图所示 

可以看到,2518只获取到了很少的CPU资源。关闭cat进程,命令如下。 

[root@RHEL813 ~]# killall -9 cat
[root@RHEL813 ~]# 

开启1号CPU,命令如下。 

[root@RHEL813 ~]# echo "1" >> /sys/devices/system/cpu/cpu1/online 
[root@RHEL813 ~]# lscpu
架构:           x86_64
CPU 运行模式:   32-bit, 64-bit
字节序:         Little Endian
CPU:             2
在线 CPU 列表:  0,1
每个核的线程数: 1
每个座的核数:   2
座:             1
NUMA 节点:      1
厂商 ID:        GenuineIntel
BIOS Vendor ID:  GenuineIntel
CPU 系列:       6
型号:           141
型号名称:       11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
BIOS Model name: 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
步进:           1
CPU MHz:        2304.004
BogoMIPS:       4608.00
超管理器厂商:   VMware
虚拟化类型:     完全
L1d 缓存:       48K
L1i 缓存:       32K
L2 缓存:        1280K
L3 缓存:        24576K
NUMA 节点0 CPU: 0,1
标记:           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid movdiri movdir64b fsrm avx512_vp2intersect md_clear flush_l1d arch_capabilities
[root@RHEL813 ~]# 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值