内核模块及系统监控
Linux系统内核模块
- Linux系统内核模块是对Linux小内核的扩充
- 这些模块可在需要时装入也可在不需要时卸载
- 将这些模块与系统核心部分分开的好处是:
- 在没有增加开机时载入内核映像大小的情况下,又允许在需要时扩充内核的功能
- 内核中许多组件可被编译成可动态载入的形式
- 这些编译后的组件就是内核模块
- 内核模块外挂在核心上——这样在增加系统功能的同时却没有增加核心的大小
Linux系统内核模块功能
- Linux系统内核模块有两个功能:
- 提供计算机外围设备的驱动程序
- 提供一些其他的文件系统的支持
- 在载入内核模块时可以设定内核模块
- 所有的内核模块都存放在/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虚拟文件系统的特色
- 可使用/proc获取内核配置信息或对内核进行配置
- 一个虚拟文件系统,所有文件只存在内存中、并不存到硬盘上
- 系统重启后所有更改过的内容自动消失、又回到初始设置
- 利用/proc可显示进程的信息、内存资源、硬件设备等
- /proc中有一些子目录、如/proc/PID/子目录中包含了所有进程
- 利用子目录中文件可修改网络置和内存设置或内核的一些参数
- 所有对/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命令完成的工作:
- 列出所有当前的系统设置:sysctl –a
- 从/etc/sysctl.conf文件中重新载入系统设置:sysctl –p
- 动态设置一个在/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 [选项] [时间间隔] [刷新显示信息的次数]
- 几个比较常用的选项为:
- -d:显示硬盘所传输的数据和服务时间、即包括每个硬盘
- -p:包含每个分区的统计信息、p是partition的第1个字母
- -c:只显示CPU的使用信息
- -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