一个程序在系统中被加载到内存中运行,就产生了一个进程,在 Linux 系统当中,每一个进行给会有一个 ID,称为 PID 。
PID(进程标识符)是一个用于标识运行在Linux系统上的进程的唯一整数值。每个运行的程序都会分配一个唯一的 PID ,通过 PID 可以唯一标识和引用一个进程,进行创建、终止、等待和通信等操作。
本文主要介绍 CentOS 7.x 中的进程管理相关基础知识与命令。
查看进程命令 ps
程序一般是指存储在硬盘中的可执行文件,进程则是指运行该程序后在内存中的个体,为了能管理这个在内存中的个体,系统就赋予了一个 PID 。
ps 命令可以显示当前系统上所有进程的详细信息,包括进程ID(PID)、进程状态、进程用户、终端、CPU使用情况、内存使用情况等。
命令格式:
ps [选项] [参数]
常用的选项和参数包括
参数 | 说明 |
-e | 显示所有进程,包括其他用户(非root)的进程。 |
-f | 显示完整的进程信息。 |
-l | 以长格式显示进程信息。 |
-u | 按照用户ID和用户名显示进程信息。 |
-p PID | 显示指定PID的进程信息。 |
命令示例:
# 输入命令
ps -l
# 可能返回以下内容
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 27217 27214 0 80 0 - 29118 do_wai pts/0 00:00:00 bash
0 R 0 28037 27217 0 80 0 - 38332 - pts/0 00:00:00 ps
分别显示了bash进程、ps进程的信息,具体参数功能如下:
参数 | 说明 |
F | 进程标识,表示进程的权限。 |
S | 进程状态。R进程正在运行,S睡眠状态(可被唤醒),D睡眠状态(不可被唤醒),T停止状态,Z僵尸状态 |
UID | 进程的用户ID。 |
PID | 进程ID。 |
PPID | 父进程ID,指向了创建该进程的原始进程。 |
C | 进程使用的CPU时间(单位为秒)。 |
PRI | 进程的优先级,它决定了进程的抢占顺序。 |
NI | nice值,用于控制进程的优先级。 |
ADDR | 内存地址。 |
SZ | 进程使用的内存大小(单位为KB)。 |
TTY | 进程运行终端的类型。 |
TIME | 进程使用的CPU时间(单位为秒),包括用户时间和系统时间。 |
CMD | 运行该进程的命令。 |
其它命令组合示例:
# 显示所有用户的所有进程的详细信息
ps aux
# 以长格式显示所有用户的所有进程的详细信息
ps -aux
# 显示指定进程名的进程的详细信息
ps -C process_name
动态查看进程变化命令 top
top 命令用于显示当前系统中运行中的进程的实时信息,包括进程的 CPU 使用率、内存使用情况、运行时间、PID(进程 ID)等。
常用选项和功能:
参数 | 说明 |
-a | 显示所有进程,包括其他用户的进程。 |
-u | 显示进程的用户信息。 |
-n | 更新频率,例如 -n 5 表示每5秒更新一次。 |
-p | 显示特定进程 ID 的详细信息。 |
-i | 以图形模式显示进程信息。 |
显示进程树状结构命令 pstree
pstree 命令用于显示当前系统中所有进程的树状结构。它以树状的形式展示了一个系统中的所有进程,每个进程用箭号连接起来,形成一个树状结构。这个树状结构可以帮助你更好地理解系统中的进程关系,以及哪些进程是父子进程关系。
使用 pstree 命令时,可以使用-p
选项来显示特定进程的进程树,例如pstree -p <PID>
。
# 输入命令
pstree
# 可能返回以下内容
systemd─┬─YDLive───7*[{YDLive}]
├─YDService───22*[{YDService}]
├─acpid
├─2*[agetty]
├─atd
├─auditd───{auditd}
├─barad_agent─┬─barad_agent
│ └─barad_agent─┬─sh
│ └─4*[{barad_agent}]
├─crond
├─dbus-daemon
├─dhclient
├─iscsid
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─ntpd
├─polkitd───6*[{polkitd}]
├─rshim───{rshim}
├─rsyslogd───2*[{rsyslogd}]
├─sgagent───{sgagent}
├─sshd─┬─sshd───sshd
│ └─sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tat_agent───8*[{tat_agent}]
└─tuned───4*[{tuned}]
终止进程命令 kill
kill 命令用于终止进程的命令。它通过发送信号来请求进程结束,可以使用kill
命令来终止单个进程或一组进程。
# 命令格式
kill [选项] <进程ID>
# 命令示例
kill -10
常用选项和用法:
参数 | 说明 |
-l | 列出可用的信号列表。 |
-p | 只发送信号,而不等待进程响应。 |
-s | 指定要发送的信号类型,例如 SIGTERM 表示发送终止信号。 |
-u <用户> | 终止指定用户的进程。 |
<PID> | 终止指定进程 ID 的进程。 |
使用 kill 命令时需要足够的权限才能终止进程。通常,只有 root 用户或具有特定权限的用户才能使用 kill 命令终止进程。
在终止进程时需谨慎操作,避免意外终止重要进程导致系统不稳定或数据丢失。
指定名称终止进程命令 killall
killall 命令用于终止指定名称的进程的命令,通过发送信号来请求进程结束,并匹配进程名称来终止多个进程。
# 命令格式
killall [选项] <进程名称>
# 命令示例
killall firefox
需要注意的是,在使用 killall 命令时,需要谨慎操作,确保了解要终止的进程以及可能的影响。
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!