一、查看进程
- 运行态(Running)
- 定义:处于运行态的进程正在 CPU 上执行指令。在单 CPU 系统中,同一时刻只有一个进程处于运行态;在多 CPU 或多核系统中,可能有多个进程同时处于运行态。
- 示例:
- 当你在计算机上运行一个计算密集型程序,如科学计算软件在进行复杂的数学运算时,该程序对应的进程在 CPU 上执行运算指令,此时这个进程就处于运行态。
- 就绪态(Ready)
- 定义:就绪态的进程已经准备好运行,即它们已经获得了除 CPU 资源之外的所有运行所需资源,但正在等待 CPU 分配时间片来执行。
- 示例:
- 在一个多任务操作系统中,有多个应用程序同时打开。当你在前台运行一个程序(如文本编辑器)时,其他后台程序(如音乐播放器)对应的进程如果没有被阻塞,就处于就绪态,等待 CPU 调度。
- 阻塞态(Blocked)
- 定义:阻塞态的进程由于等待某些事件的发生(如等待 I/O 操作完成、等待获取某个锁等)而暂时无法继续执行,此时即使 CPU 空闲也不能被调度运行。
- 示例:
- 当一个进程发起了从硬盘读取数据的操作(如打开一个大型文件),在数据从硬盘加载到内存的过程中,这个进程就处于阻塞态,因为它必须等待 I/O 操作完成才能继续执行后续的指令。
- 一个网络应用程序在等待网络数据接收时,例如等待服务器的响应,也会处于阻塞态。
(一)ps 选项 参数
ps
是 “process status”(进程状态)的缩写。它是一个用于查看当前系统中正在运行进程信息的实用程序。通过ps
命令,用户可以获取有关进程的各种详细信息,如进程 ID(PID)、父进程 ID(PPID)、CPU 使用率、内存使用率、运行状态、启动时间等。—— 但是是静态的,相当于快照
选项
- -a:显示所有终端上的所有进程,包括其他用户的进程。
- -x:显示没有控制终端的进程。
- -u:以用户友好的格式显示进程信息。
- -f:全格式显示,包括父进程ID、进程状态、CPU使用率等更多列。
- -e:显示系统中所有的进程。
- -f:全格式显示。
- -l:长格式显示,包括更多的信息如进程命令行、会话ID等。
- -u:按用户显示,可以指定用户名。
- -p:按进程ID显示,可以指定PID。
- -o:自定义输出格式,可以指定要显示的列和排序方式。
PID
:进程 ID,是每个进程在系统中的唯一标识符。
USER
:进程所属的用户。
PR
:进程优先级,数值越小优先级越高。
NI
:进程的 Nice 值,用于调整进程优先级,范围是 - 20 到 19,负数表示更高的优先级。
VIRT
:进程使用的虚拟内存大小,包括进程代码、数据、共享库以及被交换到磁盘的内存页面等所有占用的内存空间。
RES
:进程正在使用的物理内存大小(驻留集大小),不包括交换到磁盘的内存部分。
SHR
:进程使用的共享内存大小,这部分内存可以被多个进程共享。
S
:进程状态,和ps
命令中的状态表示类似,如R
(运行)、S
(睡眠)、D
(不可中断睡眠)等。
%CPU
:CPU 使用率,即进程占用 CPU 时间的百分比。
%MEM
:内存使用率,即进程占用物理内存的百分比。
TIME +
:进程自启动以来使用 CPU 的总时间。
COMMAND
:进程对应的命令名称。
(二)top 选项 参数
top
是一个非常重要的性能监测和进程查看工具。它能够实时显示系统中各个进程的资源占用情况以及系统的整体性能状态。top
这个名字可以理解为 “top processes”(顶级进程),因为它主要用于展示占用资源最多的进程相关信息。—— 动态显示
选项
-
基本选项
-d <秒数>
:指定屏幕信息刷新的时间间隔。默认情况下,top
每3秒刷新一次显示的数据。用户可以通过这个选项来调整刷新频率,以适应不同的监控需求。-p <进程ID>
:只监视特定PID的进程。这个选项允许用户专注于一个或多个特定的进程,而不是查看所有进程的信息。-u <用户名>
:仅显示指定用户的进程。当系统中有大量用户时,使用这个选项可以快速定位属于某个用户的进程。-b
:批处理模式输出,适合脚本或重定向到文件。这使得top
的输出可以被保存到文件中或者进一步处理,而无需用户交互。
-
高级选项
-n <次数>
:指定top
命令运行的次数后自动退出。例如,top -n 5
将会更新五次后自动退出。-H
:在进程信息中显示线程详细信息。这对于需要分析多线程应用程序的性能非常有用。-i
:不显示闲置(idle)或无用的进程。这个选项可以帮助用户忽略那些不影响系统性能的进程。-c
:显示完整的命令行而不截断。默认情况下,top
可能会截断显示过长的命令行,使用这个选项可以避免这种情况。
-
交互式操作
h 或 ?
:显示帮助页面。用户可以在运行时通过按键触发这些命令来获取更多的帮助信息。k
:终止一个进程(需要输入PID)。这个命令允许用户在不离开top
界面的情况下终止不需要的进程。r
:更改一个进程的优先级(需要输入PID和新的nice值)。通过这个命令,用户可以动态地调整进程的优先级,以优化系统性能。q
:退出top。这是退出top
的标准方式。
下面两张图对比,可以发现数据发送了变化
(三)pstree 选项
pstree
是一个用于以树状结构展示进程间关系的工具。它能够清晰地呈现出各个进程之间的父子关系,帮助用户直观地理解系统中进程的层次结构。
选项
- -a:显示每个程序的完整指令,包含路径、参数或是常驻服务的标示。
- -c:不使用精简标示法,强制展开相同的子树。
- -G:使用VT100终端机的列绘图字符。
- -h:列出树状图时,特别标明现在执行的程序。
- -H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序。
- -l:采用长列格式显示树状图。
- -n:用程序识别码排序。预设是以程序名称来排序。
- -p:显示程序识别码。
- -u:显示用户名称。
- -U:使用UTF-8列绘图字符。
- -V:显示版本信息。
(四)pgrep 选项 参数
pgrep
是一个用于根据进程名称或其他属性来查找进程 ID(PID)的工具。它可以帮助用户快速定位符合特定条件的进程,在进程管理和监控等场景中非常有用。
选项
- -a:列出PID和完整的命令行。
- -c:计算匹配的进程数量,而不是正常输出。
- -d:指定输出分隔符。
- -f:使用完整进程名来匹配。
- -g:匹配列出的进程组ID。
- -G:匹配真实组ID。
- -h:列出树状图时,特别标明现在执行的程序。
- -l:显示PID和进程名称。
- -n:仅显示找到的最大(结束)进程号。
- -o:仅显示找到的最小(起始)进程号。
- -P:只匹配给定父进程的子进程。
- -s:匹配会话ID。
- -t:匹配控制终端。
- -u:匹配有效用户ID。
- -U:匹配真实用户ID。
- -v:反向匹配。
- -w:列出所有线程ID。
- -x:与命令名完全匹配。
- -F:从文件中读取PID。
- -L:如果PID文件未锁定则失败。
- --ns:匹配属于同一命名空间的进程。
- --nslist:列出哪些命名空间将被视为--ns选项。
- -V:输出版本信息。
- -help:显示帮助信息并退出。
案例:查找与sshd服务相关的进程
显示有五个PID
PID 是 “Process Identification Number”(进程标识号)的缩写。在 Linux 和其他操作系统中,它是一个独一无二的数字标识符,用于区分系统中正在运行的各个进程。就像每个人都有一个独一无二的身份证号码一样,每个进程也有一个唯一的 PID 来标识自己。
二、终止进程
(一)kill 选项 参数
kill的选项选项一般是信号,参数为PID
1、查看信号
常见信号类型及含义
SIGTERM
(15):- 这是
kill
命令默认发送的信号。它是一种比较温和的终止信号,用于请求进程正常终止。大多数进程在收到SIGTERM
信号后,会先进行一些清理工作,如释放资源、保存数据等,然后再终止。例如,当你使用kill <PID>
(没有指定信号编号)命令时,实际上就是向进程发送SIGTERM
信号,希望进程能够优雅地结束。
- 这是
SIGKILL
(9):- 这是一个强制终止信号。与
SIGTERM
不同,进程收到SIGKILL
信号后会立即终止,不会进行任何清理工作。它通常用于当进程无法响应SIGTERM
信号,或者需要立即终止一个可能处于死锁或失控状态的进程。不过,由于这种方式是强制终止,可能会导致数据丢失或系统资源未正确释放等问题。例如,kill -9 <PID>
命令会发送SIGKILL
信号来强行终止指定的进程。
- 这是一个强制终止信号。与
SIGSTOP
(19)和SIGCONT
(18):SIGSTOP
信号用于暂停一个进程的执行,进程在收到这个信号后会停止运行,并且不会自动恢复,直到收到SIGCONT
信号。这两个信号通常用于进程调试或者作业控制。例如,在调试一个多进程程序时,可以使用kill -19 <PID>
暂停某个进程,然后进行检查,检查完毕后使用kill -18 <PID>
恢复进程的执行。
SIGINT
(2):- 这个信号通常在用户通过键盘输入
Ctrl + C
组合键时发送。它用于中断一个正在运行的前台进程,进程收到SIGINT
信号后可以选择终止或者忽略该信号并继续运行。在很多命令行工具中,收到SIGINT
信号后会停止当前操作并返回提示符状态。例如,当你在运行一个长时间的脚本,按Ctrl + C
就会向脚本进程发送SIGINT
信号。
- 这个信号通常在用户通过键盘输入
2、终止进程
案例:终止PID为2443的进程
因为我使用远程工具,而2443就是它的进程,终止后远程终止了
重新连接后PID会重新定义
(二)killall 选项 参数
使用kill我们会发现一个问题,就是kill只能一次终止一个进程,如果一个软件占大进程很多,我们需要多次操作。但killall可以终止全部进程。
killall的选项选项一般也是信号,参数为服务名称
案例:启动Nginx服务,查看,再关闭
要在root用户下操作
1、切换到软件的所在目录
2、启动服务,但是发现80端口被占用了
3、发现被httpd使用了
4、找到nginx.con的文件
4、把80端口修改为8080,保存退出
5、启动、查看服务,可以正常启动了
6、关闭进程,可以看到关闭后查不到如何进程了
三、前台任务与后台任务
前台任务
- 定义:在 Linux 系统中,前台任务是指在当前终端会话中正在交互执行的任务。当一个程序在前台运行时,它会占据当前终端的输入和输出,直到该任务完成或被暂停、终止。—— 需要和用户交互,优先级高
想象你在舞台上表演节目,这个舞台就是你的终端。当你在舞台上表演(执行任务)时,台下的观众(你自己)都只能看着你表演,不能做别的事情,这就是前台任务。
比如你在终端打开一个文本编辑器来编辑文件,在你关闭这个文本编辑器之前,你不能在这个终端做其他操作了,这个文本编辑器的操作就是前台任务。
后台任务
- 定义:后台任务是指在系统中运行,但不占据当前终端的输入和输出的任务。后台任务允许用户在启动任务后继续在终端进行其他操作。
还是用舞台来比喻,后台任务就像是在舞台后面有一群人在帮忙准备道具、布置场景。他们在工作的时候,舞台上的表演(你的终端操作)不受影响,你还可以继续在舞台上做其他事情。
例如,你让电脑在后台下载一个很大的文件。你在终端发出下载命令后,不用一直盯着下载进度,你可以在这个终端继续输入其他命令,做其他工作,下载这个操作就是后台任务。
(一)jobs 选项 参数
jobs
命令用于查看当前终端会话中正在运行的后台作业(任务)。当你将一个程序放到后台运行时,jobs
命令可以帮助你了解这些后台任务的状态。
选项
-
-l:列出作业的状态(运行、停止等)以及作业的命令行。这是默认行为,通常不需要显式指定。
-
-p:只显示作业的进程ID(PID),不包括作业号或命令行。
-
-r:只显示正在运行的作业。如果作业已停止,则不会显示。
-
-s:只显示已停止的作业。如果作业正在运行,则不会显示。
案例:没有任何任务
案例:后台执行top命令
(二)bg 参数
bg
命令用于将已停止的后台作业恢复到后台继续运行。
将前台任务调到后台
在后台执行top命令
(三)fg命令
将后台任务调到前台任务
进入hello后随便写点内容,然后ctrl+z快捷键停止任务
调到后台
调到前台,直接进行文件
四、服务管理
服务进程又称守护进程
CentOS 7版本之前使用service、chkconfig命令,但是CentOS 9使用systemctl代替了service、chkconfig。
(一)systemctl 功能命令 服务进程
功能命令
- 启动服务
- 命令:
systemctl start <service - name>
- 功能:用于启动指定的服务。例如,要启动
httpd
服务(假设系统中安装了httpd
),可以使用systemctl start httpd
。这会使httpd
服务开始运行,开始监听相应的端口并处理请求(如果是网络服务的话)。
- 命令:
- 停止服务
- 命令:
systemctl stop <service - name>
- 功能:用于停止正在运行的服务。例如,
systemctl stop httpd
会停止httpd
服务,使其不再处理新的请求,关闭相关的监听端口。
- 命令:
- 重启服务
- 命令:
systemctl restart <service - name>
- 功能:用于重启指定的服务。这相当于先执行
stop
命令再执行start
命令。例如,systemctl restart httpd
会先停止httpd
服务,然后再重新启动它,这在对服务的配置文件进行修改后需要重新加载配置时很有用。
- 命令:
- 查看服务状态
- 命令:
systemctl status <service - name>
- 功能:用于查看指定服务的当前状态。例如,
systemctl status httpd
会显示httpd
服务是否正在运行、最近的启动或停止时间、是否有错误等信息。输出内容包括服务的活跃状态(active
或inactive
)、进程 ID(如果正在运行)、日志信息等。
- 命令:
- 使服务开机自启
- 命令:
systemctl enable <service - name>
- 功能:用于设置指定的服务在系统开机时自动启动。例如,
systemctl enable httpd
会将httpd
服务配置为开机自启,这样在系统下次重新启动时,httpd
会自动开始运行。
- 命令:
- 取消服务开机自启
- 命令:
systemctl disable <service - name>
- 功能:用于取消指定服务的开机自启设置。例如,
systemctl disable httpd
会将httpd
服务从开机自启列表中移除,系统下次重启时不会自动启动httpd
。
- 命令:
- 查看所有服务列表
- 命令:
systemctl list - units --type=service
- 功能:用于列出系统中所有的服务。这个命令会显示服务的名称、状态(
loaded
、active
等)、描述等信息,帮助用户全面了解系统中安装和运行的服务情况。
- 命令:
- 重新加载服务配置
- 命令:
systemctl reload <service - name>
- 功能:用于重新加载指定服务的配置文件。这与
restart
不同,reload
通常不会中断服务的运行,只是重新读取配置文件使其生效。例如,对于一些配置文件修改频繁的服务(如nginx
等),使用systemctl reload nginx
可以在不中断服务的情况下使新配置生效。
- 命令:
- 查看服务是否开机自启
- 命令:
systemctl is - enabled <service - name>
- 功能:用于检查指定服务是否设置为开机自启。如果是,会返回
enabled
;如果不是,返回disabled
。例如,systemctl is - enabled httpd
可以判断httpd
服务是否会在开机时自动启动。
- 命令:
案例:以http为例子,使用systemctl的用法
1、安装http服务,该服务的守护进程为httpd
2、查看http服务运行状态——关闭状态
3、开启http服务
4、终止http服务
5、设置http服务开机自启动
五、计划任务
(一)at 选项 参数
选项
-l:查看计划任务。
-f:从文件中读取任务
-d:删除计划任务,参数为任务编号。
1、案例:制定计划任务,18:00重启http服务
输入完systemctl restart httpd 回车2次即可
查看计划
(二)crontab 选项 参数
选项
-e:编辑crontab文件
-l:查看当前的计划任务
-r:删除计划任务
-u:编辑其他用户的计划任务,通常root使用该选项
* * * * * command_to_execute
- - - - -
| | | | |
| | | | +---- 星期几 (0 - 7) (星期天=0或7)
| | | +------ 月份 (1 - 12)
| | +-------- 一个月中的第几天 (1 - 31)
| +---------- 小时 (0 - 23)
+------------ 分钟 (0 - 59)
案例:每周末凌晨3点进入系统维护状态,30分钟后重启系统
1、编辑cronjob文件,把定时任务写入
2、加载命令,确认执行
3、查看计划
这个定时任务的含义如下:
- 时间设置:
- 分钟:
0
,表示在 0 分钟时。 - 小时:
3
,表示在 3 点。 - 日期:
*
,表示任意日期。 - 月份:
*
,表示任意月份。 - 星期几:
6
,表示星期六。
- 分钟:
- 执行的命令:
/usr/sbin/shutdown -r -t 1800
- 这是一个系统关机命令。
-r
选项表示重启系统,-t 1800
表示在执行关机操作前等待 1800 秒(30 分钟)。
- 这是一个系统关机命令。