9.1查看和控制进程
9.1.1 查看进程
1.ps命令
pS 命令是 Linux 操作系统中最为常用的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照。通过不同的命令选项,可以有选择性地查看进程信息。
1 BSD风格(free BSD)
# ps au 命令的输出结果解释
# USER: 进程的所有者(用户)
# PID: 进程ID(Process ID),唯一标识一个进程
# %CPU: 进程占用的CPU百分比
# %MEM: 进程占用的物理内存百分比
# VSZ: 进程使用的虚拟内存大小(KB)
# RSS: 进程使用的物理内存大小(KB)
# TTY: 进程使用的终端类型
# STAT: 进程状态(例如 S=休眠, R=运行, Z=僵尸, T=停止, I=空闲)
# START: 进程启动时间
# TIME: 进程使用的CPU时间(分钟:秒)
# COMMAND: 启动进程的命令或程序名
# 示例输出:
[root@localhost ~]# ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 834 0.0 0.1 110220 1696 tty1 Ss+ 13:56 0:00 /sbin/agetty --noclear tty1 linux
root 1432 0.0 0.3 115692 3460 pts/0 Ss 13:56 0:00 -bash
root 1459 0.0 0.3 115560 3464 pts/1 Ss+ 13:58 0:00 -bash
root 1525 0.0 0.3 155464 3776 pts/0 R+ 14:21 0:00 ps au
2.Unix(风格)
# 字段解释
# F: 进程标志(通常表示进程类型,如普通进程(S)、内核线程(I)等)
# S: 进程状态(如 S=休眠, R=运行, I=空闲, Z=僵尸等)
# UID: 用户ID(通常是进程所有者的用户ID)
# PID: 进程ID(每个进程唯一的标识)
# PPID: 父进程ID(创建该进程的进程ID)
# C: CPU使用率(进程使用的CPU时间百分比,近似值)
# PRI: 优先级(内核调度的优先级)
# NI: nice值(调整CPU调度的优先级)
# ADDR: 进程的内存地址(内核空间地址)
# SZ: 进程使用的内存大小(KB)
# WCHAN: 进程等待的通道(进程当前睡眠的内核函数名)
# STIME: 进程启动时间
# TTY: 进程关联的终端类型(如果适用)
# TIME: 进程使用的CPU时间(累计)
# CMD: 启动进程的命令或程序名
# 示例输出
[root@localhost ~]# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 32011 ep_pol 13:55 ? 00:00:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
1 S root 2 0 0 80 0 - 0 kthrea 13:55 ? 00:00:00 [kthreadd]
1 S root 3 2 0 80 0 - 0 kthrea 13:55 ? 00:00:00 [pool_workqueue_]
1 I root 4 2 0 60 -20 - 0 rescue 13:55 ? 00:00:00 [kworker/R-rcu_g]
1 I root 5 2 0 60 -20 - 0 rescue 13:55 ? 00:00:00 [kworker/R-slub_]
1 I root 6 2 0 60 -20 - 0 rescue 13:55 ? 00:00:00 [kworker/R-netns]
1 I root 9 2 0 60 -20 - 0 worker 13:55 ? 00:00:00 [kworker/0:0H-ev]
1 I root 10 2 0 80 0 - 0 worker 13:55 ? 00:00:00 [kworker/u512:0-]
3.GNU风格(Gnu is Not Unix )
# 字段解释
# PID: 进程ID(每个进程唯一的标识)
# TTY: 进程关联的终端类型(如果适用)
# TIME: 进程使用的CPU时间(累计)
# CMD: 启动进程的命令或程序名
# 示例输出
[root@localhost ~]# ps --user root
PID TTY TIME CMD
1 ? 00:00:00 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 pool_workqueue_
4 ? 00:00:00 kworker/R-rcu_g
5 ? 00:00:00 kworker/R-slub_
# 解释
# PID 1 是 systemd 进程,它是系统的初始化系统和服务管理器,负责启动系统进程和守护进程。
# PID 2 是 kthreadd,这是内核工作线程的父线程,负责创建和管理其他内核线程。
# PID 3 是 pool_workqueue_,这可能是与内核工作队列相关的线程,用于处理内核工作项。
# PID 4 和 5 是 kworker 线程,它们是内核工作线程,用于在后台执行各种内核任务,如内存回收、I/O操作等。
# TTY 列中的 ? 表示这些进程没有关联到任何终端。
# TIME 列显示了这些进程到目前为止所使用的CPU时间。
1.top命令
# top 命令输出解释
# 顶部信息
top - 15:05:27 up 1:09, 2 users, load average: 0.00, 0.00, 0.00
# 时间戳:15:05:27
# 系统运行时间:up 1:09,表示系统运行了1小时零9分钟
# 用户数量:2 users
# 系统负载平均值:0.00, 0.00, 0.00,分别是过去1分钟、5分钟、15分钟的平均负载
# 任务和进程状态
Tasks: 150 total, 2 running, 84 sleeping, 1 stopped, 0 zombie
# 总任务数:150 total
# 运行中的进程数:2 running
# 睡眠中的进程数:84 sleeping
# 停止的进程数:1 stopped
# 僵尸进程数:0 zombie
# CPU 使用情况
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# 用户空间占用CPU百分比:0.0 us
# 内核空间占用CPU百分比:0.0 sy
# 用户进程空间内改变过优先级的进程占用CPU百分比:0.0 ni
# 空闲CPU百分比:100.0 id
# 等待输入/输出的CPU时间百分比:0.0 wa
# 硬件中断服务占用CPU百分比:0.0
# 软件中断服务占用CPU百分比:0.0 si
# 虚拟机占用CPU百分比:0.0 st
# 内存使用情况
KiB Mem : 961944 total, 638660 free, 184380 used, 138904 buff/cache
# 物理内存总量:961944 KiB
# 空闲物理内存:638660 KiB
# 已使用的物理内存:184380 KiB
# 用作缓冲和缓存的内存:138904 KiB
# 交换空间使用情况
KiB Swap: 4194300 total, 4194300 free, 0 used. 633556 avail Mem
# 交换空间总量:4194300 KiB
# 空闲交换空间:4194300 KiB
# 已使用的交换空间:0 KiB
# 可用内存(包括缓冲和交换):633556 KiB
9.1.2控制进程
1.启动进程
[root@localhost ~]# yum -y install mysql
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 mariadb.x86_64.1.5.5.68-1.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
==============================================================================================================================================================================================
Package 架构 版本 源 大小
==============================================================================================================================================================================================
正在安装:
mariadb x86_64 1:5.5.68-1.el7 c7-media 8.8 M
事务概要
==============================================================================================================================================================================================
安装 1 软件包
总下载量:8.8 M
安装大小:49 M
Downloading packages:
2.查看后台的进程
^Z #ctrl+z
[1]+ 已停止 yum -y install mysql
[root@localhost ~]# jobs -l
[1]+ 2355 停止 yum -y install mysql
3.将后台的进程恢复运行
[root@localhost ~]# bg 1 #bg 命令可以将后台中暂停执行的任务恢复运行,继续后台运行
[1]+ yum -y install mysql &
[root@localhost ~]# Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : 1:mariadb-5.5.68-1.el7.x86_64 1/1
验证中 : 1:mariadb-5.5.68-1.el7.x86_64 1/1
已安装:
mariadb.x86_64 1:5.5.68-1.el7
完毕!
[1]+ 完成 yum -y install mysql
[root@localhost ~]# fg 1 #可以将后台任务重新恢复到前台运行
yum -y install mysql
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : 1:mariadb-5.5.68-1.el7.x86_64 1/1
验证中 : 1:mariadb-5.5.68-1.el7.x86_64 1/1
已安装:
mariadb.x86_64 1:5.5.68-1.el7
完毕!
[root@localhost ~]#
3.终止进程执行
当按Ctrl+C组合键无法终止程序或者需要结束在其他终端或后台运行的进程时可以使用专用的进程终止工具kill,killall和pkill
(1)使用kill命令终止进程
[root@localhost ~]# yum -y install httpd #httpd服务
[root@localhost ~]# systemctl start httpd #启动htpd服务
[root@localhost ~]# netstat -anpt | grep httpd #查看httpd服务UIP
tcp6 0 0 :::8080 :::* LISTEN 2092/httpd
[root@localhost ~]# kill 2092
[root@localhost ~]# netstat -anpt | grep httpd
[root@localhost ~]#
以下是 kill 命令的常用参数和对应的数字信号的表格:
接下来是常见的数字信号及其描述:
(2)使用killall命令终止进程
使用killall命令可以通过进程名称来终止进程
[root@localhost ~]# vim aaa #创建一个aaa文件
[root@localhost ~]# ps #查看进程
PID TTY TIME CMD
1413 pts/0 00:00:00 bash
2952 pts/0 00:00:00 vim
3024 pts/0 00:00:00 ps
[root@localhost ~]# killall vim #根据工具名字取消
[root@localhost ~]# ps
PID TTY TIME CMD
1413 pts/0 00:00:00 bash
2952 pts/0 00:00:00 vim
3026 pts/0 00:00:00 ps
[root@localhost ~]# killall -9 vim #如取消不了进程可以-9强制取消进程
[1]+ 已杀死 vim aaa
[root@localhost ~]#
(3)使用pkill命令终止进程
使用 pkil 命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与 pgrep 命令基本类似,如“-U”(指定用户)、“-t”(指定终端)等选项。使用起来非常方便。
[root@localhost ~]# useradd zhangsan #创建用户
[root@localhost ~]# su zhangsan
#进入用户
[zhangsan@localhost root]$ pkill -U "zhangsan" #杀死用户进程 -U表示用户名
[zhangsan@localhost root]$ pkill -9 -U "zhangsan" #-9强制杀死用户进程
已杀死
[root@localhost ~]#
9.2计划任务管理
在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)
9.2.1安装at工具并使用
[root@localhost ~]# yum -y install at #安装at工具
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 at.x86_64.0.3.1.13-25.el7_9 将被 安装
--> 解决依赖关系完成
依赖关系解决
==============================================================================================================================================================================================
Package 架构 版本 源 大小
==============================================================================================================================================================================================
正在安装:
at x86_64 3.1.13-25.el7_9 c7-media 51 k
事务概要
==============================================================================================================================================================================================
安装 1 软件包
总下载量:51 k
安装大小:95 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : at-3.1.13-25.el7_9.x86_64 1/1
验证中 : at-3.1.13-25.el7_9.x86_64 1/1
已安装:
at.x86_64 0:3.1.13-25.el7_9
完毕!
[root@bogon ~]# at 19:49
at> echo aaaaa>test #向test输出aaaaa
at> <EOT> #任务设置完毕后按Ctrl+D
job 5 at Tue Jun 4 19:49:00 2024
[root@bogon ~]# ls
anaconda-ks.cfg test
[root@bogon ~]# cat test #查看结果
aaaaa
[root@bogon ~]#
9.2.3 crontab周期性任务设置
使用 crontab 命令设置的计划任务可以按预设的周期重复执行,从而大大减轻设置重复性系统管理任务的操作。
1.crontab的配置文件和目录
1.使用cat /etc/crontab查看文件的具体内容
[root@bogon ~]# cat /etc/crontab
# 这是一个注释行,使用 '#' 开头。它不会被执行,只是用来说明或解释文件的内容。
#SHELL=/bin/bash
# 指定用于执行命令的 shell。通常设置为 /bin/bash,但在此示例中它被注释掉了,意味着系统会使用默认的 shell。
#PATH=/sbin:/bin:/usr/sbin:/usr/bin
# 定义环境变量 PATH,用于指定在执行命令时搜索命令的目录列表。这里列出了常见的系统命令路径。同样,它也被注释掉了。
#MAILTO=root
# 当命令执行时产生输出(例如,错误消息或标准输出),该输出将通过邮件发送给指定的用户。在这里,它被设置为 root,但也被注释掉了。
# For details see man 4 crontabs
# 这是一个注释,建议用户查看 man 4 crontabs 以获取更详细的关于 crontab 的信息。
# Example of job definition:
# 这是一个注释,给出了 cron 作业定义的示例。
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# 这是 cron 时间字段的解释。每个 * 代表一个可以指定值的位置。
# 以下是这些字段的详细解释:
# 1. 分钟 (0 - 59)
# 2. 小时 (0 - 23)
# 3. 日期 (1 - 31)
# 4. 月份 (1 - 12) 或英文缩写(jan, feb, ...)
# 5. 星期几 (0 - 6)(其中 0 和 7 都表示星期日)或英文缩写(sun, mon, ...)
# 在这些字段之后,指定了要执行命令的用户名,然后是要执行的命令本身。
#根据/etc/crontab 配置文件中的设定,crond 将按照不同的周期重复执行相应目录中的任务脚本文件。
2.使用crontab命令管理用户的计划任务
设置用户的周期性计划任务列表主要通过 crontab命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。
[root@bogon ~]# crontab -e #进入编辑
30 22 * * * 1,3,5 /usr/sbin/shutdown -h now #写入脚本
[root@bogon ~]# crontab -l #查看
30 22 * * * 1,3,5 /usr/sbin/shutdown -h now
[root@bogon ~]#
#“30 22 * * * 1,3,5 /usr/sbin/shutdown -h now “这字段含义值
这个计划任务的意思是:在每周一、三、五的晚上10点30分(22:30),执行/usr/sbin/shutdown -h now 命令来立即关闭系统。