第10-2章:监控与管理作业系统上之程序(二)

前言

在上一章节中,讲述了Linux process之基本原理与机制,以及控制jobs工作的方法,并让工作执行可以在前景与背景之间切换,本章节,将继续延续上一章节的内容,继续讲解有关於Linux process的原理。

使用讯号来控制Process程序

当一个指令或是程序被执行起来的时候,运行的程序或是指令就是process,作业系统会针对每一个process程序配置一个id编号并有唯一性,这是用来识别这个process程序用的,除此之外,每个process程序可以接收讯号,讯号是让作业系统能够操控程序的状态,相关的讯号列表如下说明:

  • 当讯号数字为:1时,代表的是Hangup,这个讯号目的是用来控制process之中断所使用的,也可以用来请求让process程序可以重新初始化,或是不用中断就重新载入prcoess程序。
  • 当讯号数字为:2时,代表使用键盘按键中断,这个讯号是用来表示程序中断,可以利用「Ctrl」+「C」之组合键做到。
  • 当讯号数字为:3时,则表示使用键盘之按键让程序离开,通常使用「Ctrl」+「\」之组合键来做到,把所有coredump的资料存成档案并暂存在记忆体。
  • 当讯号数字为:9的时候,也会造成程序的中断,强制停止的意思,非必要不要传送此讯号给process程序。
  • 当讯号数字为:15时,为预设的讯号数字,会等待程序结束之後再中断程序。
  • 当讯号数字为:18时,传送继续运行的讯息给process,如果process已经停止了,则不会blocked住,
  • 当讯号数字为:19时,暂停process,不会blocked或是能够处理(handled)。
  • 当讯号数字为:20时,使用键盘停止process,可以利用键盘「Ctrl」+「Z」组合键来传送此讯号。

使用指令来传送讯号数字

可以使用kill指令并搭配讯号数字参数将指定的process id给停止或是砍掉,以sleep 100 &指令为例子,并搭配不同的讯号数字来观看停止process程序会有哪些的状态,相关的指令执行後的结果如下:

[rockylinux@workstation ~]$ sleep 100 &
[2] 2595
[rockylinux@workstation ~]$ kill -1 2595
[rockylinux@workstation ~]$
[2]-  Hangup                  sleep 100
[rockylinux@workstation ~]$ sleep 100 &
[2] 3541
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ kill -2 3541
[rockylinux@workstation ~]$
[2]-  Interrupt               sleep 100
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ kill -3 4206
[rockylinux@workstation ~]$
[2]-  Quit                    (core dumped) sleep 100
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ kill -9 4226
[rockylinux@workstation ~]$
[2]-  Killed                  sleep 100
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ kill -15 4227
[rockylinux@workstation ~]$
[2]-  Terminated              sleep 100
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ kill 4228
[rockylinux@workstation ~]$
[2]-  Terminated              sleep 100
[rockylinux@workstation ~]$ sleep 100 &
[2] 4237
[rockylinux@workstation ~]$ kill -19 4237

[2]+  Stopped                 sleep 100
[rockylinux@workstation ~]$ kill -18 4237
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ jobs -l
[2]-  4237 Running                 sleep 100 &
[rockylinux@workstation ~]$

除了使用kill指令之外,pkill指的是可以带使用者名称或是群组名称的参数并将使用使用者或是群组所执行的process程序给砍掉,相关的执行指令用法如下:

[rockylinux@workstation ~]$ pkill -U rockylinux
Connection to 192.168.0.21 closed by remote host.
Connection to 192.168.0.21 closed.

从上面的执行指令的输出就可以发现,将rockylinux使用者所执行的process程序都被砍掉了,连远端所建立的连线shell也被砍掉,因此导致远端连线关闭与中断。

此外,也可以使用killall指令将有关於某个正在以此指令所执行的程序给砍掉,相关的执行指令的输出讯息如下:

[rockylinux@workstation ~]$ sleep 100 &
[1] 4535
[rockylinux@workstation ~]$ sleep 100 &
[2] 4536
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ killall sleep
[1]-  Terminated              sleep 100
[2]+  Terminated              sleep 100
[rockylinux@workstation ~]$

另外,可以使用w这个指令来找到目前谁登入到这个使用者在做存取使用,相关的执行指令之输出讯息如下:

[rockylinux@workstation ~]$ w
 01:01:20 up  3:59,  1 user,  load average: 0.01, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
rockylin pts/0    192.168.0.9      00:58    0.00s  0.13s  0.02s w

pgrep指令是用来查看某个指定的使用者或是群组名称正在以此名称执行的程序有哪些,相关的指令执行方法与输出的讯息如下:

[rockylinux@workstation ~]$ pgrep -l -u rockylinux
4395 systemd
4400 (sd-pam)
4415 pulseaudio
4416 sshd
4419 bash
4454 dbus-daemon
4459 gvfsd
4466 gvfsd-fuse

pstree指令是将process以树状图的方式呈现,可以看到process之间的关系,因为有的process会从某一个process中fork出来做执行,那主要process就是parent,而从parent process所fork出来的就叫做child process,而可以使用pstree指令并搭配-p指令并指定使用者名称,便可以输出以指定的使用者名称执行相关指令的清单,相关的执行指令输出的讯息如下:

[rockylinux@workstation ~]$ pstree -p rockylinux
sshd(4416)───bash(4419)───pstree(4703)

systemd(4395)─┬─(sd-pam)(4400)
              ├─dbus-daemon(4454)───{dbus-daemon}(4457)
              ├─gvfsd(4459)─┬─{gvfsd}(4461)
              │             └─{gvfsd}(4463)
              ├─gvfsd-fuse(4466)─┬─{gvfsd-fuse}(4469)
              │                  ├─{gvfsd-fuse}(4470)
              │                  ├─{gvfsd-fuse}(4471)
              │                  ├─{gvfsd-fuse}(4474)
              │                  └─{gvfsd-fuse}(4478)
              └─pulseaudio(4415)───{pulseaudio}(4490)

监控程序活动

在Linux作业系统上,有平均载入的时间与其计算,就是先前的章节有提到CPU在处理每一个任务的时候会有request queue与waiting quque,一直不断的把process在上述的queue伫列之间做切换,而可以使用uptime这个指令来查看作业系统已经运行了多久,相关的执行指令的方式与输出讯息如下:

[rockylinux@workstation ~]$ uptime
 01:18:19 up  4:16,  2 users,  load average: 0.04, 0.26, 0.14

可以从可以从上述的指令输出讯息可以知道,目前有两个使用者在这个作业系统上进行存取,4:16,指的是目前已经运行了4小时左右,另外也可以使用-p参数让输出运行的时间之可读性变高,相关的执行指令所输出的讯息如下:

[rockylinux@workstation ~]$ uptime -p
up 4 hours, 21 minutes
[rockylinux@workstation ~]$

而作业系统上要查看所使用的CPU(中央处理器)资讯也是可以的,可以使用lscpu指令或是将/proc/cpuinfo的档案内容印出来都可以,相关执行指令的方式与输出的讯息如下:

[rockylinux@workstation ~]$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2
On-line CPU(s) list: 0,1
Thread(s) per core:  1
Core(s) per socket:  2
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               42
Model name:          Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
Stepping:            7
CPU MHz:             3292.522
BogoMIPS:            6585.04
Hypervisor vendor:   KVM
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            6144K
NUMA node0 CPU(s):   0,1
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic popcnt aes xsave avx hypervisor lahf_lm pti md_clear flush_l1d
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 42
model name      : Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
stepping        : 7
cpu MHz         : 3292.522
cache size      : 6144 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic popcnt aes xsave avx hypervisor lahf_lm pti md_clear flush_l1d
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips        : 6585.04
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 42
model name      : Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
stepping        : 7
cpu MHz         : 3292.522
cache size      : 6144 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic popcnt aes xsave avx hypervisor lahf_lm pti md_clear flush_l1d
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips        : 6585.04
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

[rockylinux@workstation ~]$

最後,总结一下process管理的方式,若要查看process相关的一瞬间内容,可以用ps指令并搭配一些参数做到最基本的查看,若要看到每个process之即时执行的状态等相关的资讯,则可以使用top指令做查看,或者额外安装htop这个套件,并使用htop指令做查看也是可以,这个指令可以看到更多的process状态资讯以及丰富的额外功能会显示在process之即时输出讯息中,相关安装htop指令相关的执行後输出的资讯如下:

[rockylinux@workstation ~]$ sudo yum install epel-release
Last metadata expiration check: 1:33:11 ago on Wed 29 Sep 2021 12:23:18 AM CST.
Dependencies resolved.
============================================================================================================
 Package                      Architecture           Version                   Repository              Size
============================================================================================================
Installing:
 epel-release                 noarch                 8-13.el8                  extras                  23 k

Transaction Summary
============================================================================================================
Install  1 Package

Total download size: 23 k
Installed size: 35 k
Is this ok [y/N]: y
Downloading Packages:
epel-release-8-13.el8.noarch.rpm                                            474 kB/s |  23 kB     00:00
------------------------------------------------------------------------------------------------------------
Total                                                                        36 kB/s |  23 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                    1/1
  Installing       : epel-release-8-13.el8.noarch                                                       1/1
  Running scriptlet: epel-release-8-13.el8.noarch                                                       1/1
  Verifying        : epel-release-8-13.el8.noarch                                                       1/1
Installed products updated.

Installed:
  epel-release-8-13.el8.noarch

Complete!
[rockylinux@workstation ~]$ sudo yum update
Extra Packages for Enterprise Linux Modular 8 - x86_64                      269 kB/s | 955 kB     00:03
Extra Packages for Enterprise Linux 8 - x86_64                              347 kB/s |  10 MB     00:30
Last metadata expiration check: 0:00:02 ago on Wed 29 Sep 2021 01:57:04 AM CST.

由於htop不在既有的镜像里面,因此需要先安装epel-release(Extra Packages for Enterprise Linux (EPEL) ),後面的章节还会提到这些安装的方式与执行的方法,接着安装好之後,就可以安装htop指令了,相关安装指令执行输出的讯息如下:

[rockylinux@workstation ~]$ sudo yum install -y htop
Last metadata expiration check: 0:02:04 ago on Wed 29 Sep 2021 01:57:04 AM CST.
Dependencies resolved.
============================================================================================================
 Package                Architecture             Version                       Repository              Size
============================================================================================================
Installing:
 htop                   x86_64                   3.0.5-1.el8                   epel                   142 k

Transaction Summary
============================================================================================================
Install  1 Package

Total download size: 142 k
Installed size: 326 k
Downloading Packages:
htop-3.0.5-1.el8.x86_64.rpm                                                 394 kB/s | 142 kB     00:00
------------------------------------------------------------------------------------------------------------
Total                                                                       125 kB/s | 142 kB     00:01
warning: /var/cache/dnf/epel-2f52d25564da0fd7/packages/htop-3.0.5-1.el8.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 2f86d6a1: NOKEY
Extra Packages for Enterprise Linux 8 - x86_64                              1.6 MB/s | 1.6 kB     00:00
Importing GPG key 0x2F86D6A1:
 Userid     : "Fedora EPEL (8) <[email protected]>"
 Fingerprint: 94E2 79EB 8D8F 25B2 1810 ADF1 21EA 45AB 2F86 D6A1
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                    1/1
  Installing       : htop-3.0.5-1.el8.x86_64                                                            1/1
  Running scriptlet: htop-3.0.5-1.el8.x86_64                                                            1/1
  Verifying        : htop-3.0.5-1.el8.x86_64                                                            1/1
Installed products updated.

Installed:
  htop-3.0.5-1.el8.x86_64

Complete!
[rockylinux@workstation ~]$

课後练习

  • 开启workstation虚拟机并登入rockylinux使用者并开启终端机。
  • 执行sleep 100指令并试着将此process程序暂时停止。
  • 使用kill指令将上述停止的程序重新运行。
  • 使用kill指令用预设的讯号号码将上述正在运行的指令给砍掉。
  • 执行sleep 100 &指令。
  • 使用kill指令将上述在背景运行的指令强制结束与关闭。
  • 查看目前此台虚拟机器的CPU相关资讯,如CPU型号、核心数等。
  • 依序执行sleep 100 &指令3次,并确定此三个程序有在背景中确切的运行。
  • 使用指令将上述有关於执行sleep指令的程序都砍掉。

<<:  14【推坑】考 APCS 升大学大有优势

>>:  [Day 28] 资料产品开发实务 - 非机器学习模型

Day 0x7 - Laravel 资料库连接设定、资料表规划

0x1 Laravel 资料库连接 请先确认 php.ini 的 pdo_pgsql extensi...

Day-16 OS初体验

OS初体验 tags: IT铁人 甚麽是OS OS是Operating System的缩写,比如说现...

Day01 iPhone捷径是啥

原本是想说要来写资安事件处理流程, 但要串的东西实在太多了, 又加上怕准备的资料不够齐全所以就放弃这...

Day08超连结与图片(HTML)

超连结 每个网页几乎都会有超连结的存在 用来连接各个网站 形成互联网 而使用方法非常简单 马上放上范...

[Day 11] 多对多关联的变形:Parent-Child reference

之前我们看过了透过 DAO 方式,来处理资料之间呈现一对多关联,或者多对多关联的做法。 今天我们来看...