Linux进程

部分转自实验楼

Linux 为我们提供了一些工具来查看进程的状态信息。我们可以通过 top 实时的查看进程的状态,以及系统的一些信息(如 CPU、内存信息等),我们还可以通过 ps 来静态查看当前的进程信息,同时我们还可以使用 pstree 来查看当前活跃进程的树形结构。

top 工具的使用

top 工具是我们常用的一个查看工具,能实时的查看我们系统的一些关键信息的变化:

$ top
image.png

top 是一个在前台执行的程序,所以执行后便进入到这样的一个交互界面,正是因为交互界面我们才可以实时的获取到系统与进程的信息。在交互界面中我们可以通过一些指令来操作和筛选。

我们看到 top 显示的第一排,

  • top 表示当前程序的名称
  • 11:05:18 表示当前的系统的时间
  • up 8 days,17:12 表示该机器已经启动了多长时间
  • 1 user 表示当前系统中只有一个用户
  • load average: 0.29,0.20,0.25 分别对应1、5、15分钟内cpu的平均负载(超过1表示有进程在排队)

来看 top 的第二行数据,基本上第二行是进程的一个情况统计:

  • Tasks: 26 total 进程总数
  • 1 running 1个正在运行的进程数
  • 25 sleeping 25个睡眠的进程数
  • 0 stopped 没有停止的进程数
  • 0 zombie 没有僵尸进程数

来看 top 的第三行数据,这一行基本上是 CPU 的一个使用情况的统计了:

  • Cpu(s): 1.0%us 用户空间进程占用CPU百分比
  • 1.0% sy 内核空间运行占用CPU百分比
  • 0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比
  • 97.9%id 空闲CPU百分比
  • 0.0%wa 等待输入输出的CPU时间百分比
  • 0.1%hi 硬中断(Hardware IRQ)占用CPU的百分比
  • 0.0%si 软中断(Software IRQ)占用CPU的百分比
  • 0.0%st (Steal time) 是 hypervisor 等虚拟服务中,虚拟 CPU 等待实际 >- CPU 的时间的百分比

来看 top 的第四行数据,这一行基本上是内存的一个使用情况的统计了:

  • 8176740 total 物理内存总量
  • 8032104 used 使用的物理内存总量
  • 144636 free 空闲内存总量
  • 313088 buffers 用作内核缓存的内存量
  • 注意:
    系统中可用的物理内存最大值并不是 free 这个单一的值,而是 free + buffers + swap 中的 cached 的和。

来看 top 的第五行数据,这一行基本上是交换区的一个使用情况的统计了:

  • total 交换区总量
  • used 使用的交换区总量
  • free 空闲交换区总量
  • cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖

再下面就是进程的一个情况了:

  • PID 进程id
  • USER 该进程的所属用户
  • PR 该进程执行的优先级 priority 值
  • NI 该进程的 nice 值
  • VIRT 该进程任务所使用的虚拟内存的总数
  • RES 该进程所使用的物理内存数,也称之为驻留内存数
  • SHR 该进程共享内存的大小
  • S 该进程进程的状态: S=sleep R=running Z=zombie
  • %CPU 该进程CPU的利用率
  • %MEM 该进程内存的利用率
  • TIME+ 该进程活跃的总时间
  • COMMAND 该进程运行的名字

NICE 值叫做静态优先级,是用户空间的一个优先级值,其取值范围是-20至19。这个值越小,表示进程”优先级”越高;

PR 值表示 Priority 值叫动态优先级,是进程在内核中实际的优先级值,进程优先级的取值范围是通过一个宏定义的,这个宏的名称是 MAX_PRIO,它的值为 140。Linux 实际上实现了 140 个优先级范围,取值范围是从 0-139,这个值越小,优先级越高。而这其中的 0 - 99 是实时进程的值,而 100 - 139 是给用户的。

在上文我们曾经说过 top 是一个前台程序,所以是可以交互的:

  • q 退出程序
  • I 切换显示平均负载和启动时间的信息
  • P 根据CPU使用百分比大小进行排序
  • M 根据驻留内存大小进行排序
  • i 忽略闲置和僵死的进程,这是一个开关式命令
  • k 终止一个进程,系统提示输入 PID 及发送的信号值。一般终止进程用 15 信号,不能正常结束则使用 9 信号。安全模式下该命令被屏蔽。

ps 工具的使用

ps 工具有许多的参数,下面给大家解释部分常用的参数:

  • 使用 -l 参数可以显示自己这次登陆的 bash 相关的进程信息罗列出来
ps -l
image.png
$ ps aux  # 会罗列出所有的进程信息
image.png

信息代表的含义:

  • F 进程的标志(process flags),当 flags 值为 1 则表示此子程序只是 fork 但没有执行 exec,为 4 表示此程序使用超级管理员 root 权限
  • USER 进程的拥有用户
  • PID 进程的 ID
  • PPID 其父进程的 PID
  • SID session 的 ID
  • TPGID 前台进程组的 ID
  • %CPU 进程占用的 CPU 百分比
  • %MEM 占用内存的百分比
  • NI 进程的 NICE 值
  • VSZ 进程使用虚拟内存大小
  • RSS 驻留内存中页的大小
  • TTY 终端 ID
  • S or STAT 进程状态
  • WCHAN 正在等待的进程资源
  • START 启动进程的时间
  • TIME 进程消耗CPU的时间
  • COMMAND 命令的名称和参数

TPGID栏写着-1的都是没有控制终端的进程,也就是守护进程

STAT表示进程的状态,而进程的状态有很多,如下所示

  • R Running.运行中
  • S Interruptible Sleep.等待调用
  • D Uninterruptible Sleep.不可中断睡眠
  • T Stoped.暂停或者跟踪状态
  • X Dead.即将被撤销
  • Z Zombie.僵尸进程
  • W Paging.内存交换
  • N 优先级低的进程
  • < 优先级高的进程
  • s 进程的领导者
  • L 锁定状态
  • l 多线程状态
  • + 前台进程

其中的 D 是不能被中断睡眠的状态,处在这种状态的进程不接受外来的任何 signal,所以无法使用 kill 命令杀掉处于D状态的进程,无论是 kill,kill -9 还是 kill -15,一般处于这种状态可能是进程 I/O 的时候出问题了。

若是查找其中的某个进程的话,我们还可以配合着 grep 和正则表达式一起使用

$ ps aux | grep zsh

此外我们还可以查看时,将连同部分的进程呈树状显示出来

$ ps axjf
image.png

可以使用这样的命令,来自定义我们所需要的参数显示:

$ ps -afxo user,ppid,pid,pgid,command
image.png

pstree 工具的使用

通过 pstree 可以很直接的看到相同的进程数量,最主要的还是我们可以看到所有进程之间的相关性。

$ pstree
image.png
$ pstree -up
#参数选择:
#-A  :各程序树之间以 ASCII 字元來連接;
#-p  :同时列出每个 process 的 PID;
#-u  :同时列出每个 process 的所屬账户名称。
image.png

kill 命令

发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。

命令格式:

$ kill [参数] [进程号]

实例:

# 杀死进程
$ kill 12345
# 彻底杀死进程
$ kill -9 12345
# 杀死指定用户所有进程
$ kill -9 $(ps -ef | grep hnlinux)  //方法一 过滤出hnlinux用户进程 
$ kill -u hnlinux  //方法二
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容