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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章