Linux 进程管理

1. ps 查看进程

1.1 ps

语法格式:ps 选项

功能描述:查看系统中所有与运行进程的详细信息

选项参数:

选项描述
a显示一个终端的所有进程,除去会话引线
u显示进程的归属者及内存的使用情况
x显示没有控制终端的进程
-l长格式显示更加详细的信息
-e显示所有进程

常用组合:

  • ps aux :查看系统中所有的进程,使用 BS 操作系统格式
  • ps -le :查看系统中所有的进程,使用 Linux 标准命令格式,显示如父进程、PID、进程优先级等

案例演示:

[root@joel ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 125320  3876 ?        Ss   Nov06   0:49 /usr/lib/systemd/system
root         2  0.0  0.0      0     0 ?        S    Nov06   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<   Nov06   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    Nov06   0:01 [ksoftirqd/0]
root         7  0.0  0.0      0     0 ?        S    Nov06   0:00 [migration/0]
...

USER:进程所属者

PID:进程的ID

%CPU:该进程占用CPU资源的百分比,一个核心是100%,四个核心是400%

%MEM:该进程占用物理内存的百分比

VSZ:该进程占用虚拟内存的大小

RSS:该进程占用实际物理内存的大小

TTY:该进程是在哪个终端运行的

  1. tty1~tty6 是本地的字符界面终端
  2. tty7 是图形终端
  3. pts/0 ~ 255 代表虚拟终端

STAT:进程状态

  1. -D:不可被唤醒的睡眠状态,通常用于 I/O 情况
  2. -R:该进程正在运行
  3. -S:该进程处于睡眠状态,可被唤醒
  4. -T:停止状态,可能是在后台暂停或进程处于除错状态
  5. -W:内存交互状态(从 2.6 内核开始无效)
  6. -X:死掉的进程(应该不会出现)
  7. -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中
  8. -<:高优先级(以下状态在 BSD 格式中出现)
  9. -N:低优先级
  10. -L:被锁入内存
  11. -s:包含子进程
  12. -l:多线程(小写 L
  13. -+:位于后台

START:该进程的启动时间

TIME:该进程占用CPU的运算时间

COMMAND:产生此进程的命令名

[root@joel ~]# ps -el
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0     1     0  0  80   0 - 31330 ep_pol ?        00:00:49 systemd
1 S     0     2     0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd
1 S     0     4     2  0  60 -20 -     0 worker ?        00:00:00 kworker/0:0H
1 S     0     6     2  0  80   0 -     0 smpboo ?        00:00:01 ksoftirqd/0
1 S     0     7     2  0 -40   - -     0 smpboo ?        00:00:00 migration/0
...

F:进程标志,说明进程的权限

  1. 1:进程可以被复制,但是不能被执行
  2. 4:进程使用超级用户权限

S:进程状态,与 ps aux 中的STAT状态一致

UID:运行该进程的用户ID

PID:该进程的ID

PPID:父进程的ID

C:该进程的CPU占用率

PRI:进程的优先级,数值越小优先级越高,越早被CPU执行

NI:进程的优先级,数值越小,越早被执行

ADDR:该进程在内存的哪个位置

SZ:该进程占用的内存

WCHAN:该进程是否运行,- 表示正在运行

TTY:该进程由哪个终端产生

TIME:该进程占用CPU的运算时间

CMD:产生此进程的命令名

1.2 pstree

可是使用 pstree 以树形结构显示程序和进程之间的关系

语法格式:pstree [选项] PID或用户名

选项参数:

  1. -c:显示启动每个进程对应的完整命令,包括启动进程的路径、参数等
  2. -c:不使用精简法显示进程信息,即显示的进程中包含子进程和父进程
  3. -n:根据进程 PID 号排序,默认为程序名牌排序
  4. -p:显示进程的 PID
  5. -u:显示进程的所属者

2. 查找具体的PID

在实际应用中,如果只知道PID,而不知道PID对应的程序,我们还是无法直接杀S进程,这时就需要用到一套组合命令:

ps -ef | grep test | grep -v grep | awk '{print $2}' | xargs kill -9

下面写一个死循环,并杀S该进程

2.1 循环

1️⃣ Step1:使用 vim 新建文件 Ptest.sh

[root@joel ~]# vim Ptest.sh

2️⃣ Step2:进去新的页面,按键盘字母 i 进入插入模式,写入死循环

#!/bin/bash

while true
do 
echo 别想干掉我!
done

3️⃣ Step3:书写完后,按键盘的 ESC 退出插入模式,输入 :wq 保存并退出

4️⃣ Step4:运行此脚本

[root@joel ~]# bash Ptest.sh

死循环开始了...

2.2 查找该进程

1️⃣ Step1:打开一个新的终端,利用 ps -ef 命令查找该进程

[root@joel ~]# ps -ef
root     30131 26888 18 09:45 pts/0    00:00:38 bash Ptest.sh
root     30273  1043  0 09:48 ?        00:00:00 sshd: root@pts/1
root     30276 30273  0 09:48 pts/1    00:00:00 -bash
root     30320 30276  0 09:49 pts/1    00:00:00 ps -ef
...

2️⃣ Step2:上面的命令列出来所有的进程,我们通过管道符 | 进行下一步查找,该符号将左边的输出作为右边的输入

3️⃣ Step3:通过 grep Ptest 根据名称查找具体的进程

[root@joel ~]# ps -ef | grep Ptest
root     30131 26888 18 09:45 pts/0    00:01:30 bash Ptest.sh
root     30551 30276  0 09:53 pts/1    00:00:00 grep --color=auto Ptest

4️⃣ Step4:上面的命令输出了两行,而我们只需要第一条,需要使用 grep -v grep 将第二条过滤掉

[root@joel ~]# ps -ef | grep Ptest | grep -v grep
root     30131 26888 18 09:45 pts/0    00:01:50 bash Ptest.sh

5️⃣ Step5:找到了具体的详细信息,确保是我们需要杀S的进程,通过 awk '{print $2}' 将字符串以空格分隔,并取到第二个

[root@joel ~]# ps -ef | grep Ptest | grep -v grep | awk '{print $2}'
30131

2.3 杀死S进程

找到进程后我们需要将该进程死S,通常使用 kill -9 PID ,但是我们发现如果在直接将该命令直接放到查找PID之前是由问题的,我们是先找到PID再死S,所以需要使用 xargs 命令,将左侧的结果当作右侧的参数。

完整的命令如下:

ps -ef | grep Ptest | grep -v grep | awk '{print $2}' | xargs kill -9

别想干掉我!
别想干掉我!
别想干掉我!
别想干掉我!Killed

3. 写在最后

| :管道符,将左边的输出作为右边的输入

awk / sed :是CentOS中非常流行的文本处理工具

xargs :将左侧命令的结果当作右侧命令的参数

 


❤️ END ❤️
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JOEL-T99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值