【Linux入门】进程管理

Linux系统
216
0
0
2024-02-28

一个程序在系统中被加载到内存中运行,就产生了一个进程,在 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腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!