在上一章节中,讲述了Linux process之基本原理与机制,以及控制jobs工作的方法,并让工作执行可以在前景与背景之间切换,本章节,将继续延续上一章节的内容,继续讲解有关於Linux process的原理。
当一个指令或是程序被执行起来的时候,运行的程序或是指令就是process,作业系统会针对每一个process程序配置一个id编号并有唯一性,这是用来识别这个process程序用的,除此之外,每个process程序可以接收讯号,讯号是让作业系统能够操控程序的状态,相关的讯号列表如下说明:
可以使用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 ~]$
sleep 100
指令并试着将此process程序暂时停止。kill
指令将上述停止的程序重新运行。kill
指令用预设的讯号号码将上述正在运行的指令给砍掉。sleep 100 &
指令。kill
指令将上述在背景运行的指令强制结束与关闭。sleep 100 &
指令3次,并确定此三个程序有在背景中确切的运行。
>>: [Day 28] 资料产品开发实务 - 非机器学习模型
0x1 Laravel 资料库连接 请先确认 php.ini 的 pdo_pgsql extensi...
OS初体验 tags: IT铁人 甚麽是OS OS是Operating System的缩写,比如说现...
原本是想说要来写资安事件处理流程, 但要串的东西实在太多了, 又加上怕准备的资料不够齐全所以就放弃这...
超连结 每个网页几乎都会有超连结的存在 用来连接各个网站 形成互联网 而使用方法非常简单 马上放上范...
之前我们看过了透过 DAO 方式,来处理资料之间呈现一对多关联,或者多对多关联的做法。 今天我们来看...