Linux 內核模塊及系統監控

Linux系統內核模塊

  • Linux系統內核模塊是對Linux小內核的擴充
  • 這些模塊可在需要時裝入也可在不需要時卸載
  • 將這些模塊與系統核心部分分開的好處是:
  • 在沒有增加開機時載入內核映像大小的情況下,又允許在需要時擴充內核的功能
  • 內核中許多組件可被編譯成可動態載入的形式
  • 這些編譯後的組件就是內核模塊
  • 內核模塊外掛在覈心上——這樣在增加系統功能的同時卻沒有增加核心的大小

Linux系統內核模塊功能

  • Linux系統內核模塊有兩個功能:
    1. 提供計算機外圍設備的驅動程序
    2. 提供一些其他的文件系統的支持
  • 在載入內核模塊時可以設定內核模塊
  • 所有的內核模塊都存放在/lib/modules目錄中
  • 可使用ls命令列出所有內核模塊

控制Linux系統內核模塊

  • 如要控制Linux系統內核模塊,

  • 可使用lsmod命令列出目前已經載入了哪些模塊

  • 可使用modprobe命令來臨時載入某個模塊

  • modprobe命令的語法格式:modprobe 模塊名

  • 可使用/sbin/modinfo命令瀏覽模塊的信息

  • modinfo命令的語法格式:modinfo 模塊名

  • modinfo命令將列出該模塊的一些信息以及它的認證許可是由哪家公司簽署的

  • 可通過/etc/modprobe.conf文件設置模塊

  • 在該文件中可設定alias、默認alias會記錄Ethernet interface、sound card、usb controller

  • 在該文件中還可設定當某一模塊被載入時需要傳給這一模塊的parameters、以及actions

  • actions表示當該模塊載入或卸載時要執行的操作

手工裝入內核模塊

  • 可使用Linux系統提供的insmod命令手工地裝入一個內核模塊、insmod是install moudule的縮寫
  • insmod的功能與之前介紹的modprobe命令相同
  • 使用modprobe命令載入模塊時可以同時載入相依賴的模塊,使用起來可能更方便些
  • insmod命令的語法格式: insmod 模塊名
  • 可使用Linux系統提供的rmmod命令手工地卸載一個內核模塊、rmmod是remove moudule的縮寫
  • rmmod命令的語法格式: rmmod 模塊名
[root@dog ~]# ls -l /lib/modules
總用量 12
drwxr-xr-x. 8 root root 4096 5月  13 04:08 2.6.32-504.el6.x86_64
drwxr-xr-x. 8 root root 4096 5月  24 23:28 2.6.32-754.29.2.el6.x86_64
drwxr-xr-x. 7 root root 4096 5月  13 04:08 3.8.13-44.1.1.el6uek.x86_64


[root@dog ~]# ls
anaconda-ks.cfg  install.log.syslog  公共的  視頻  文檔  音樂
install.log      profile.bak         模板    圖片  下載  桌面


[root@dog ~]# uname -r
2.6.32-754.29.2.el6.x86_64


[root@dog ~]# ls /lib/modules/2.6.32-754.29.2.el6.x86_64/modules.dep
/lib/modules/2.6.32-754.29.2.el6.x86_64/modules.dep


[root@dog ~]# file /lib/modules/2.6.32-754.29.2.el6.x86_64/modules.dep
/lib/modules/2.6.32-754.29.2.el6.x86_64/modules.dep: ASCII text, with very long lines


[root@dog ~]# lsmod
Module                  Size  Used by
nls_utf8                1455  1
autofs4                27032  3
sunrpc                268897  1
8021q                  20507  0
garp                    7184  1 8021q
stp                     2218  1 garp
llc                     5450  2 garp,stp
fuse                   80180  2
vmhgfs                 50659  0
vsock                  46582  4
iptable_filter          2793  0
......

/proc虛擬文件系統

  • 爲了使內核管理和維護與文件系統管理和維護能夠使用完全相同的方法,UNIX操作系統引入了一個虛擬文件系統/proc、這樣用戶就可以使用在進行文件操作時已經熟悉的命令和方法進行內核信息的查詢和配置
  • /proc並不存在於硬盤上、而是一個存放在內存中的虛擬目錄
  • 藉助修改這個虛擬目錄中的文件以及時變更內核的參數
  • /proc目錄中包含了存放目前系統內核信息的文件、通過這些文件就可以列出目前內核的狀態

/proc虛擬文件系統的特色

  1. 可使用/proc獲取內核配置信息或對內核進行配置
  2. 一個虛擬文件系統,所有文件只存在內存中、並不存到硬盤上
  3. 系統重啓後所有更改過的內容自動消失、又回到初始設置
  4. 利用/proc可顯示進程的信息、內存資源、硬件設備等
  5. /proc中有一些子目錄、如/proc/PID/子目錄中包含了所有進程
  6. 利用子目錄中文件可修改網絡置和內存設置或內核的一些參數
  7. 所有對/proc的修改立即生效
  • 可使用命令列出/proc目錄中的詳細內容
  • 可使用cat命令列出內存的詳細信息
    ls -l /proc
    cat /proc/meminfo
[root@dog ~]# ls -l /proc
總用量 0
dr-xr-xr-x.  8 root      root         0 5月  27 23:20 1
dr-xr-xr-x.  8 root      root         0 5月  27 23:20 10
dr-xr-xr-x.  8 root      root         0 5月  27 23:20 1005
dr-xr-xr-x.  8 root      root         0 5月  27 23:20 1006
dr-xr-xr-x.  8 root      root         0 5月  27 23:20 1059
......
[root@dog ~]# cat /proc/meminfo
MemTotal:        1019796 kB
MemFree:          190128 kB
Buffers:           10664 kB
Cached:           504064 kB
SwapCached:            0 kB
Active:           100668 kB
......
[root@dog ~]# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
You have new mail in /var/spool/mail/root
[root@dog ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
1
[root@dog ~]# ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
^Z
[1]+  Stopped                 ping 127.0.0.1
[root@dog ~]# echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@dog ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
0
[root@dog ~]# ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.015 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.043 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.043 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.043 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.046 ms
64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.053 ms
64 bytes from 127.0.0.1: icmp_seq=7 ttl=64 time=0.046 ms
64 bytes from 127.0.0.1: icmp_seq=8 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: icmp_seq=9 ttl=64 time=0.044 ms
64 bytes from 127.0.0.1: icmp_seq=10 ttl=64 time=0.048 ms

永久保存/proc/sys下的配置

  • 使用sysctl命令變更內核參數的設定才能將這些設定變成靜態的、即變成永久的設置,這樣在重新啓動系統時這些設定纔不會消失。
  • sysctl命令所變更的參數將保存到/etc/sysctl.conf系統設置文件中
  • 經常使用sysctl命令完成的工作:
  1. 列出所有當前的系統設置:sysctl –a
  2. 從/etc/sysctl.conf文件中重新載入系統設置:sysctl –p
  3. 動態設置一個在/proc目錄中文件的值:
    sysctl -w kernel.shmmax=2147483648
[root@dog ~]# more /etc/sysctl.conf
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.
#
# Use '/sbin/sysctl -a' to list all possible parameters.
......

[root@dog ~]# ls -l /proc/sys
總用量 0
dr-xr-xr-x 0 root root 0 5月  28 05:41 abi
dr-xr-xr-x 0 root root 0 5月  27 23:20 crypto
dr-xr-xr-x 0 root root 0 5月  28 05:41 debug
dr-xr-xr-x 0 root root 0 5月  28 05:41 dev
dr-xr-xr-x 0 root root 0 5月  27 22:51 fs
dr-xr-xr-x 0 root root 0 5月  27 22:51 kernel
dr-xr-xr-x 0 root root 0 5月  27 23:39 net
dr-xr-xr-x 0 root root 0 5月  28 05:41 sunrpc
dr-xr-xr-x 0 root root 0 5月  28 05:41 vm

[root@dog ~]# cat /proc/sys/kernel/hostname
dog.super.com

[root@dog ~]# sysctl -a | more
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 1000000
kernel.sched_latency_ns = 5000000
kernel.sched_wakeup_granularity_ns = 1000000
kernel.sched_tunable_scaling = 1
......

[root@dog ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

[root@dog ~]# sysctl -w kernel.shmmax=2147483648
kernel.shmmax = 2147483648

[root@dog ~]# cat /proc/sys/kernel/shmmax
2147483648

檢測和監督硬件設備

  • 系統使用klogd服務將系統啓動過程中屏幕顯示的信息寫入到內存的一個環形緩衝區中
  • 當環形緩衝區被寫滿後系統將把環形緩衝區中的信息寫到/var/log/dmesg日誌文件中
  • 可使用dmesg命令來查看環形緩衝區中的信息
  • 也可通過/var/log/dmesg中內容來查看這些信息

在這裏插入圖片描述

#列出環形緩衝區中的信息
[root@dog ~]# dmesg |more
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-754.29.2.el6.x86_64 (mockbuild@x86-ol6-builder-01) (gcc vers
ion 4.4.7 20120313 (Red Hat 4.4.7-23.0.1) (GCC) ) #1 SMP Tue May 12 11:05:50 PDT
2020
......


[root@dog ~]# more /var/log/dmesg
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-754.29.2.el6.x86_64 (mockbuild@x86-ol6-builder-01) (gcc ver
sion 4.4.7 20120313 (Red Hat 4.4.7-23.0.1) (GCC) ) #1 SMP Tue May 12 11:05:50 PD
T 2020
Command line: ro root=UUID=eaff7b39-53a1-4ee8-8556-a84550747a0d rd_NO_LUKS  KEYB


[root@dog ~]# ls -l /usr/share/hwdata
總用量 5756
-rw-r--r--. 1 root root  355009 6月  19 2018 MonitorsDB
-rw-r--r--. 1 root root 3748612 6月  19 2018 oui.txt
-rw-r--r--. 1 root root 1116345 6月  19 2018 pci.ids
-rw-r--r--. 1 root root   55055 6月  19 2018 pnp.ids
-rw-r--r--. 1 root root    1622 6月  19 2018 upgradelist
-rw-r--r--. 1 root root  597009 6月  19 2018 usb.ids
drwxr-xr-x. 2 root root    4096 5月  16 08:05 videoaliases
-rw-r--r--. 1 root root    1980 6月  19 2018 videodrivers

[root@dog ~]# ls -l /proc/*info
-r--r--r--. 1 root root 0 5月  28 05:51 /proc/buddyinfo
-r--r--r--. 1 root root 0 5月  28 05:51 /proc/cpuinfo
-r--r--r--. 1 root root 0 5月  28 05:51 /proc/meminfo
-r--r--r--. 1 root root 0 5月  28 05:51 /proc/pagetypeinfo
-rw-r--r--. 1 root root 0 5月  28 05:51 /proc/slabinfo
-r--------. 1 root root 0 5月  28 05:51 /proc/vmallocinfo
-r--r--r--. 1 root root 0 5月  28 05:51 /proc/zoneinfo
[root@dog ~]# cat /proc/cpuinfo
processor    : 0
vendor_id    : GenuineIntel
cpu family    : 6
model        : 158
model name    : Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
stepping    : 9
......

[root@dog ~]# more /etc/udev/udev.conf
# The initial syslog(3) priority: "err", "info", "debug" or its
# numerical equivalent. For runtime debugging, the daemons internal
# state can be changed with: "udevadm control --log-priority=<value>".
udev_log="err"
......


[root@dog ~]# ls -l /etc/udev/rules.d/
總用量 40
-rw-r--r--. 1 root root 1652 11月 20 2010 60-fprint-autosuspend.rules
-rw-r--r--. 1 root root 1060 7月  24 2010 60-pcmcia.rules
-rw-r--r--. 1 root root  316 1月  25 2018 60-raw.rules
-rw-r--r--. 1 root root  789 3月  30 07:48 70-persistent-cd.rules
-rw-r--r--. 1 root root  420 3月  24 11:55 70-persistent-net.rules
-rw-r--r--. 1 root root  320 1月  11 2017 90-alsa.rules
-rw-r--r--. 1 root root   83 8月  17 2014 90-hal.rules
-rw-r--r--. 1 root root 2486 9月  12 2017 97-bluetooth-serial.rules
-rw-r--r--. 1 root root  308 4月   9 2019 98-kexec.rules
-rw-r--r--. 1 root root  341 5月  13 04:08 99-vmware-scsi-udev.rules

[root@dog ~]# more /etc/udev/rules.d/50-udev.rules
/etc/udev/rules.d/50-udev.rules: 沒有那個文件或目錄

[root@dog ~]# more /etc/udev/rules.d/60-pcmcia.rules
# PCMCIA devices:
#
ACTION!="add", GOTO="pcmciautils_end"
......

PCI總線

  • PCI是Peripheral Component Interconnect(外設部件互連標準)的縮寫
  • PCI是目前個人電腦中使用最廣泛的接口,幾乎所有的主板產品上都帶有這種插槽
  • 用/sbin/lspci命令查看目前哪些設備插在PCI插槽中
  • 這些PCI信息存放在/proc/bus/pci/子目錄中
  • 可用ls命令列出/proc/bus/pci/子目錄中所有內容
#查看目前有哪些設備插在PCI插槽中
[root@dog ~]# lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
......

#列出/proc/bus/pci中所有內容
[root@dog ~]# ls -l /proc/bus/pci
總用量 0
dr-xr-xr-x. 2 root root 0 5月  28 06:02 00
dr-xr-xr-x. 2 root root 0 5月  28 06:02 02
-r--r--r--. 1 root root 0 5月  28 06:02 devices

#列出那些設備插在USB插槽中
[root@dog ~]# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub

[root@dog ~]# ls -l /media
總用量 14
drwxr-xr-x.  2 root root 4096 5月  19 22:13 cdrom
drwxr-xr-x.  2 root root 4096 5月  19 22:13 floppy
drwxr-xr-x. 12 dag  dag  6144 10月 18 2014 OL6.6 x86_64 Disc 1 20141018

系統監視工具top

  • 在Linux中使用最頻繁的系統監督工具可能是top
  • 可使用top命令列出系統狀態、系統默認每5秒鐘刷新一下屏幕上的顯示結果
[root@dog ~]# top
top - 04:26:47 up 35 min,  3 users,  load average: 0.22, 0.16, 0.10        
Tasks:  84 total,   1 running,  83 sleeping,   0 stopped,   0 zombie       
Cpu(s):  5.3% us,  7.9% sy,  0.7% ni, 85.8% id,  0.0% wa,  0.3% hi,  0.0% si
Mem:    807032k total,   290772k used,   516260k free,    23144k buffers   
Swap:  2096472k total,        0k used,  2096472k free,   174456k cached    
                                                                                 
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND        
3601 root      15   0 39052  16m 4228 S  8.3  2.1   0:39.72 X               
……                     
  • top - 04:26:47 up 35 min, 3 users表示:
    • 該系統早上04:26:47開機,已開啓35分鐘,目前系統上有3個用戶
  • load average: 0.22, 0.16, 0.10表示:
    • 過去10分鐘系統平均負載,其中3個數字分別代表現在、5分鐘前和10分鐘前系統的平均負載
    • 該系統目前系統平均負載是0.22,5分鐘前系統平均負載是0.16,而10分鐘前系統平均負載是0.10
  • load average爲任務隊列的平均長度。通常對於單CPU系統,1以下表示系統大部分時間空閒、1~2之間表示系統正好以它的能力運行、而2~3表示系統輕度負載、10以上表示系統已經嚴重過載。

系統監視工具free

  • 另一個常用的Linux和UNIX操作系統監測工具是free,可以使用free命令來顯示內存的使用狀態
  • 使用free命令可同時獲得物理內存和虛擬內存(交換區)的使用量
[root@dog ~]# free
             total       used       free     shared    buffers     cached
Mem:       1019796     875804     143992       4392      29536     496340
-/+ buffers/cache:     349928     669868
Swap:      4194300          0    4194300

系統監控工具vmstat

  • vmstat工具可用來顯示進程、內存、交換區、I/O以及CUP的工作狀態:
  • vmstat命令顯示結果中一些列的具體含義:
  • process / r:進程正在等待CPU(運行隊列的大小)。
  • process / b:進程在不中斷地睡眠。
  • swap / si:進程從交換區滾入(載入)內存。
  • swap / so :進程滾出到交換區上,但是仍然處於運行狀態。
  • io / bi:載入內存的數據塊數。
  • io / bo:寫入硬盤的數據塊數。
  • system / in:每秒鐘的中斷次數。
  • system / cs:每秒鐘的環境切換的次數。
  • cpu / us:執行用戶代碼所使用的CPU時間。
  • cpu / sy:執行系統碼所使用的CPU時間。
  • cpu / id:CPU空閒時間。
  • vmstat [時間間隔] [顯示的記錄行數]
  • cpu / wa:CPU等待的時間。
#使用vmstat命令列出系統的進程、內存、交換區、I/O以及CPU的工作狀態
[root@dog ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0 143868  29584 496360    0    0   369     3   46   92  0  1 99  0  0

#使用以下vmstat命令監督系統的運行情況、3表示每3秒刷新一次顯示信息、5表示一共刷新5次:
[root@dog ~]# vmstat 3 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0 143868  29592 496388    0    0   368     3   46   92  0  1 99  0  0
1  0      0 143836  29592 496388    0    0     0     0   34   63  0  0 100  0  0
0  0      0 143836  29592 496388    0    0     0     0   42  110  0  0 100  0  0
0  0      0 143844  29592 496388    0    0     0     0  116  331  4  0 95  0  0
0  0      0 143844  29600 496388    0    0     0     4  108  304  3  0 96  0  0

系統監控工具iostat

  • 監督系統I/O設備負載信息的常用工具還有iostat
  • 它除了可獲取I/O設備性能方面的信息之外,還可獲取CPU性能方面的信息
  • 該工具顯示結果的第1部分是從系統啓動以來的統計信息、而接下來的部分就是從前一部分報告的時間算起的統計信息
  • iostat [選項] [時間間隔] [刷新顯示信息的次數]
  • 幾個比較常用的選項爲:
    1. -d:顯示硬盤所傳輸的數據和服務時間、即包括每個硬盤
    2. -p:包含每個分區的統計信息、p是partition的第1個字母
    3. -c:只顯示CPU的使用信息
    4. -x:顯示擴展的硬盤統計信息、x是extended的縮寫
#使用iostat命令來監督linux系統的CPU使用狀況,其中2表示每2s刷新(重新收集)一次顯示信息,3表示一共刷新顯示信息3次
[root@dog ~]# iostat -c 2 3
Linux 2.6.32-754.29.2.el6.x86_64 (dog.super.com)     2020年05月28日     _x86_64_(1 CPU)


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.39    0.00    0.57    0.03    0.00   99.01


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00
#*使用以下iostat命令監督硬盤分區的運行狀況:
  顯示結果列名的簡單解釋如下:
    * tps:表示transfers per second的縮寫(每秒鐘傳輸的數量)
    * kB_read/s:每秒鐘從硬盤中讀出數據的KB數
    * kB_wrtn/s:每秒寫入硬盤數據的KB數
    * kB_read:從硬盤中讀出數據的總KB數
    * kB_wrtn:寫入硬盤數據的總KB數

[root@dog ~]# iostat -p -k 3 2
Linux 2.6.32-754.29.2.el6.x86_64 (dog.super.com)     2020年05月28日     _x86_64_(1 CPU)


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.39    0.00    0.56    0.03    0.00   99.01


Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.01         0.02         0.00        222          0
sda               3.81       357.12         3.30    4675014      43168
sda1              0.05         0.18         0.00       2397         32
sda2              0.03         0.11         0.00       1452          0
sda3              3.73       356.78         3.30    4670557      43136


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.68    0.00    0.00    0.00    0.00   99.32


Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.00         0.00         0.00          0          0
sda               0.00         0.00         0.00          0          0
sda1              0.00         0.00         0.00          0          0
sda2              0.00         0.00         0.00          0          0
sda3              0.00         0.00         0.00          0          0

系統中進程的監控

  • Linux系統上運行的每一個程序都在系統中創建一個相對應的進程

  • 當一個用戶登錄Linux系統並啓動shell時他就啓動了一個進程(shell進程)

  • 當用戶執行一個Linux命令或開啓一個應用程序時他也啓動了一個進程

  • 當一個進程創建另一個進程時第1個進程被稱爲新進程的父進程、而新進程被稱爲子進程

  • 當子進程運行時父進程處於等待狀態。當子進程完成了它的工作之後,子進程會通知父進程,然後父進程終止子進程

  • 使用ps命令列出所在shell所調度運行的全部進程:

  • ps命令有一些選項、可通過使用不同的選項以不同格式顯示進程狀態的信息:ps [選項]

  • ps命令可有多個選項、以下是兩個常用的選項:

    • -e:顯示每一個進程的信息、包括PID、TTY、TIME和CMD
    • -f:顯示每一個進程的全部信息列表、除了-e選項顯示的信息之外,還額外地增加了UID、父進程標識符號和進程啓動時間
  • 使用帶有-ef選項的ps命令列出目前系統上被調度運行的所有進程

#不帶任何參數的ps命令僅列出所在的shell所調度運行的進程(不會列出任何系統的守護進程)
[root@dog ~]# ps
  PID TTY          TIME CMD
3266 pts/0    00:00:00 su
3274 pts/0    00:00:00 bash
4464 pts/0    00:00:00 ping
4468 pts/0    00:00:00 ping
4521 pts/0    00:00:00 more
4537 pts/0    00:00:00 more
4540 pts/0    00:00:00 more
4614 pts/0    00:00:00 dmesg
4615 pts/0    00:00:00 more
4712 pts/0    00:00:00 top
4797 pts/0    00:00:00 ps

帶有 -ef選項的ps命令列出目前在系統上被調度運行的所有進程

以下是ps命令顯示結果每一列的解釋:
1. UID:該進程的擁有者(owner)的用戶名
2. PID:該進程的唯一進程標識號碼
3. PPID:父進程的進程標識號碼
4. C:這個值已經不再使用了
5. STIME:該進程啓動的時間(小時:分:秒)
6. TTY:進程的控制終端、系統守護進程將顯示問號?、表示該進程不是使用終端啓動的
7. TIME:該進程的累計執行時間
8.CMD:命令名、選項和參數

[root@dog ~]# ps -ef | more
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 02:47 ?        00:00:01 /sbin/init
root         2     0  0 02:47 ?        00:00:00 [kthreadd]
root         3     2  0 02:47 ?        00:00:00 [migration/0]
root         4     2  0 02:47 ?        00:00:00 [ksoftirqd/0]
root         5     2  0 02:47 ?        00:00:00 [stopper/0]
root         6     2  0 02:47 ?        00:00:00 [watchdog/0]
root         7     2  0 02:47 ?        00:00:13 [events/0]
root         8     2  0 02:47 ?        00:00:00 [events/0]
root         9     2  0 02:47 ?        00:00:00 [events_long/0]
root        10     2  0 02:47 ?        00:00:00 [events_power_ef]
root        11     2  0 02:47 ?        00:00:00 [cgroup]
......

pgrep命令

  • 爲了方便進程的搜尋操作,Linux引入了一個功能類似ps和grep的組合命令的單獨命令、即pgrep
  • 可用pgrep命令利用名字來顯示指定的進程
  • 它默認只顯示在命令行上匹配所指定條件的每個進程的PID
  • 使用帶有-l選項的pgrep命令將顯示進程的名字
[root@dog ~]# ps -ef | grep tty
root      2618     1  0 02:48 tty2     00:00:00 /sbin/mingetty /dev/tty2
root      2621     1  0 02:48 tty3     00:00:00 /sbin/mingetty /dev/tty3
root      2623     1  0 02:48 tty4     00:00:00 /sbin/mingetty /dev/tty4
root      2625     1  0 02:48 tty5     00:00:00 /sbin/mingetty /dev/tty5
root      2627     1  0 02:48 tty6     00:00:00 /sbin/mingetty /dev/tty6
root      2651  2648  0 02:48 tty1     00:00:47 /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-B4NKhR/database -nolisten tcp vt1
root      4813  3274  0 06:38 pts/0    00:00:00 grep tty

[root@dog ~]# pgrep -l klogd
2356 klogd

進程監控命令pstree

  • Linux系統還提供了另一個可能看起來更直觀的與進程管理有關的命令、即pstree命令
  • pstree命令將正在運行的進程作爲一棵樹來顯示
  • 樹的根基可以是一個進程的PID也可以是init(如果在命令中沒有參數)
#作者的

#列出PID爲4729的進程的進程狀態樹
[root@dog ~]# pstree 4729
su───bash───more

#如在命令中指定的參數是用戶名,進程樹的根是基於該用戶所擁有的進程

[root@dog ~]# pstree dog
bash───su───bash───more
#我自己系統的

#使用pstree命令列出PID爲24的金車房的進程狀態樹
[root@dog ~]# pstree 24
ata_sff/0

#列出用戶dag的所有進程的進程狀態樹
[root@dog ~]# pstree dag
bonobo-activati───{bonobo-activat}


clock-applet


dbus-daemon───{dbus-daemon}


dbus-launch


gconf-im-settin


gconfd-2


gnome-session─┬─abrt-applet
              ├─bluetooth-apple
              ├─gdu-notificatio
              ├─gnome-panel───{gnome-panel}
              ├─gnome-power-man
              ├─gnome-volume-co
              ├─gpk-update-icon───{gpk-update-ico}
              ├─metacity───{metacity}
              ├─nautilus
              ├─nm-applet
              ├─polkit-gnome-au
              ├─restorecond
              └─{gnome-session}


gdm-user-switch


gnome-keyring-d───2*[{gnome-keyring-}]


gnome-screensav


gnome-settings-───{gnome-settings}


gnome-terminal─┬─bash───su───bash─┬─dmesg
               │                  ├─6*[more]
               │                  ├─2*[ping]
               │                  ├─pstree
               │                  └─top
               ├─gnome-pty-helpe
               └─{gnome-terminal}


gnote


gvfs-afc-volume───{gvfs-afc-volum}


gvfs-gdu-volume


gvfs-gphoto2-vo


gvfsd


gvfsd-burn


gvfsd-metadata


gvfsd-trash


ibus-x11


im-settings-dae─┬─ibus-daemon─┬─ibus-engine-pin
                │             ├─ibus-gconf
                │             ├─python
                │             └─{ibus-daemon}
                └─{im-settings-da}


notification-ar


pulseaudio─┬─gconf-helper
           └─2*[{pulseaudio}]


seahorse-daemon


trashapplet


vmtoolsd───{vmtoolsd}


wnck-applet


#不帶任何參數的pstree命令列出這個系統所有進程的進程狀態樹
[root@dog ~]# pstree
init─┬─NetworkManager─┬─dhclient
     │                └─{NetworkManager}
     ├─VGAuthService
     ├─abrtd
     ├─acpid
     ├─atd
     ├─auditd───{auditd}
     ├─automount───4*[{automount}]
     ├─bonobo-activati───{bonobo-activat}
     ├─certmonger
     ├─clock-applet
     ├─console-kit-dae───63*[{console-kit-da}]
     ├─crond
     ├─cupsd
     ├─2*[dbus-daemon───{dbus-daemon}]
     ├─2*[dbus-launch]
     ├─devkit-power-da
     ├─gconf-im-settin
     ├─gconfd-2
     ├─gdm-binary─┬─gdm-simple-slav─┬─Xorg
     │            │                 ├─gdm-session-wor─┬─gnome-session─┬─abrt-app+
     │            │                 │                 │               ├─bluetoot+
     │            │                 │                 │               ├─gdu-noti+
     │            │                 │                 │               ├─gnome-pa+
     │            │                 │                 │               ├─gnome-po+
     │            │                 │                 │               ├─gnome-vo+
     │            │                 │                 │               ├─gpk-upda+
     │            │                 │                 │               ├─metacity+
     │            │                 │                 │               ├─nautilus
     │            │                 │                 │               ├─nm-applet
     │            │                 │                 │               ├─polkit-g+
     │            │                 │                 │               ├─restorec+
     │            │                 │                 │               └─{gnome-s+
     │            │                 │                 └─{gdm-session-wo}
     │            │                 └─{gdm-simple-sla}
     │            └─{gdm-binary}
     ├─gdm-user-switch
     ├─gnome-keyring-d───2*[{gnome-keyring-}]
     ├─gnome-screensav
     ├─gnome-settings-───{gnome-settings}
     ├─gnome-terminal─┬─bash───su───bash─┬─dmesg
     │                │                  ├─6*[more]
     │                │                  ├─2*[ping]
     │                │                  ├─pstree
     │                │                  └─top
     │                ├─gnome-pty-helpe
     │                └─{gnome-terminal}
     ├─gnote
     ├─gvfs-afc-volume───{gvfs-afc-volum}
     ├─gvfs-gdu-volume
     ├─gvfs-gphoto2-vo
     ├─gvfsd
     ├─gvfsd-burn
     ├─gvfsd-metadata
     ├─gvfsd-trash
     ├─hald─┬─hald-runner─┬─hald-addon-acpi
     │      │             └─hald-addon-inpu
     │      └─{hald}
     ├─ibus-x11
     ├─im-settings-dae─┬─ibus-daemon─┬─ibus-engine-pin
     │                 │             ├─ibus-gconf
     │                 │             ├─python
     │                 │             └─{ibus-daemon}
     │                 └─{im-settings-da}
     ├─master─┬─pickup
     │        └─qmgr
     ├─mcelog
     ├─5*[mingetty]
     ├─modem-manager
     ├─notification-ar
     ├─polkitd
     ├─pulseaudio─┬─gconf-helper
     │            └─2*[{pulseaudio}]
     ├─rpc.idmapd
     ├─rpc.statd
     ├─rpcbind
     ├─rsyslogd───3*[{rsyslogd}]
     ├─rtkit-daemon───2*[{rtkit-daemon}]
     ├─seahorse-daemon
     ├─sshd
     ├─trashapplet
     ├─udevd───2*[udevd]
     ├─udisks-daemon─┬─udisks-daemon
     │               └─{udisks-daemon}
     ├─2*[vmtoolsd───{vmtoolsd}]
     ├─vmware-vmblock-───2*[{vmware-vmblock}]
     ├─wnck-applet
     ├─wpa_supplicant
     └─xinetd

控制進程的信號(Signal)

  • 在Linux中是使用信號(Signal)來控制進程
  • 一個信號就是可以傳送給一個進程的一個消息、進程通過執行信號所要求的操作來響應信號
  • 信號由一個信號號碼和一個信號名來標識,每一個信號都有一個相關的操作,常用信號的描述如下:
  • 在這裏插入圖片描述

kill命令

  • 用kill命令把一個信號發送給一個或多個進程
  • kill命令只能終止一個用戶所屬的那些進程、但是root用戶可以使用kill命令終止任何進程
  • kill命令默認向進程發送signal 15、該信號將引起進程以一種有序的方式終止
  • kill命令的語法格式爲:kill [-signal] PIDs
#用kill命令以一種有序方式終止PID爲3852的進程
[root@dog ~]# kill 3852

#使用kill命令殺死PID爲3908的進程
[root@dog ~]# kill -9 3908

pkill命令及組合鍵

  • 使用pkill命令向一個進程發送信號
  • 默認pkill命令向進程發送signal 15的終止信號
  • 與kill命令不同的是pkill允許使用進程名來標識要終止的進程
  • 使用pkill命令終止more命令所對應的進程
  • CTL+C表示SIGINT (2)
    [root@dog ~]# pkill more
  • CTL+Z表示SIGSTOP (19)
#使用pkill命令終止more命令所對應的進程
[root@dog ~]# pkill more
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章