Linux进程相关管理(ps、top、kill)

目录

一、概念

二、查看进程

1、ps命令查看进程

1)ps显示某个时间点的程序运行情况

2)查看指定的进程信息

2、top命令查看进程

1)信息统计区:

2)进程信息区

3)交互式命令

三、信号控制进程

四、作业控制


一、概念

程序:二进制文件,文件存储在磁盘中,例如/usr/bin/目录下

进程:当运行可执行文件后,会被装载到内存中,接着CPU会执行程序中的每一条指令,这时这个运行中的程序,就被称为进程(进程是已启动的可执行程序的运行实例)。

线程:是操作系统能够进行运算调度的最小单位。

它被包含在进程之中,是进程中的实际运作单位。

一条线程指的是进程中一个单一顺序的控制流(线程是进程当中的一条执行流程),一个进程中可以并发多个线程,每条线程并行执行不同的任务。


  • 进程和程序不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程
  • 进程具有并发性和交往性,而程序是封闭的
  • 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有
  • 线程不能单独执行,但每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。
  • 同一个进程内多个线程之间可以共享代码块、数据段、打开的文件等资源,但每个流程都有独立的寄存器和栈,这样可以确保线程的控制流是相对独立的
  • 进程是资源分配的单位,线程是CPU调度的单位;进程拥有一个完整的资源平台,而线程只独享必不可少的资源。

进程分类:

二、查看进程

在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态。

比较完整的进程状态变迁图:

(注:图片来自进程和线程之间有什么根本性的区别? - 知乎

1、ps命令查看进程

1)ps显示某个时间点的程序运行情况

-a :显示所有用户的进程

-u :显示用户名和启动时间

-x :显示没有控制终端的进程

-e :显示所有进程,包括没有控制终端的进程

-l :长格式显示

-w:宽行显示,可以使用多个 w 进行加宽显示

-f:做一个更完整的输出

# 查看当前用户的进程

root@localhost \~# ps -l

F------程序标识,说明程序的权限。

4表示此程序的权限为root,1表示此子程序仅进行复制而没有实际执行

S------程序状态(STAT)

R(Running):该程序正在运作中;

S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒;

D:不可被唤醒的睡眠状态,通常可能是在等待I/O的情况;

T:停止状态(stop),可能是在工作控制(后台暂停)或traced状态;

Z(Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。

+:位于前台的进程组

UID------代表此程序被该UID所拥有

PID------程序的PID号码

PPID------此程序的父进程PID号码。

C------CPU使用率,单位为百分比

PRI(Priority),NI(Nice)

------代表此程序被CPU所执行的优先顺序,数值越小代表该程序越快被CPU执行

ADDR/SZ/WCHAN:都与内存有关。

ADDR------kernel funcition,指出该程序在内存的哪个部分,如果是 running的程序,一般会显示-。

SZ------代表此程序用掉多少内存

WCHAN------表示目前程序是否运作中,若为-表示正在运行。

TTY------登入者的终端机位置,若为远程终端登入则使用动态终端界面(pts/n)。

TIME------使用掉的CPU时间,即此程序实际花费CPU运作的时间。

CMD------触发此进程的指令是什么。

root@localhost \~# ps -u

root@localhost \~# ps aux |less

USER: 运行进程的用户

PID: 进程ID

%CPU: CPU占用率

%MEM: 内存占用率

VSZ: 占用虚拟内存

RSS: 占用实际内存 驻留内存

TTY: 进程运行的终端

STAT: 进程状态 man ps (/STATE)

R 运行

S 可中断睡眠 Sleep

D 不可中断睡眠

T 停止的进程

Z 僵尸进程

X 死掉的进程

s 进程的领导者,父进程 <

< 优先级较高的进程

N 优先级的进程

  • 表示是前台的进程组

l 以线程的方式运行

START: 进程的启动时间

TIME: 进程占用CPU的总时间

COMMAND: 进程文件,进程名

#自定义显示字段

root@localhost \~# ps axo user,pid,ppid,%mem,command

# 查看进程树

root@localhost \~# pstree

2)查看指定的进程信息

XML 复制代码
[root@localhost ~]# ps aux |grep sshd
[root@localhost ~]# cat /run/sshd.pid
1210
XML 复制代码
# 查看远程连接sshd的所有进程
[root@localhost ~]# pgrep -l sshd

# 如果把sshd服务全都关掉(killall sshd)之后需在虚拟机上重启sshd服务,才能进行远程连接
[root@localhost ~]# systemctl start sshd

2、top命令查看进程

格式:top -d 数字 | -bnp

选项:

-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒

-b:以批次的方式执行top;通常会搭配数据流重定向来将批处理的结果输出为文件。

-n:与-b搭配,进行几次top的输出结果

-i: 不显示闲置或者僵死的进程信息

-c:显示进程的整个命令路径,而不是只显示命令名称

-s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险

-p:指定某些个PID来进行查看检测

XML 复制代码
[root@localhost ~]# top -d 1
[root@localhost ~]# top -d 1 -p 3598    #查看指定进程的动态信息
[root@localhost ~]# top -d 1 -p 10126,1
[root@localhost ~]# top -d 1 -u root    #查看指定用户的进程

#将2次top信息写入到文件
[root@localhost ~]# top -d 1 -b -n 2 > top.txt 

top的输出可分为统计信息区(前五行)和进程信息区

1)信息统计区:

第一行为任务队列信息

cpp 复制代码
top - 14:12:56 up  2:15,  5 users,  load average: 0.01, 0.08, 0.11

14:12:56 表示当前系统时间 up 2:15 表示系统已启动4小时32分钟

5 users 表示当前登录系统的用户数

load average: 0.01, 0.08, 0.11 表示系统1分钟、5分钟、15分钟前到现在的平均负载(如果 是1表示满负载)

第二行

cpp 复制代码
Tasks: 315 total,   2 running, 313 sleeping,   0 stopped,   0 zombie

315 total 进程的总数 2 running 正在运行的进程数 313 sleeping 处于休眠的进程数

0 stopped 停止的进程数 0 zombie 僵死的进程数

第三行

cpp 复制代码
%Cpu(s):  0.5 us,  0.5 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

0.5 us 表示进程占用CPU的百分比 0.5 sy 系统进程占用CPU的百分比

0.0 ni 用户进程空间内改变过优先级的进程占用CPU的百分比

99.0 id 空闲CPU占用的百分比

0.0 wa 代表I/Owait表示等待输入、输出的进程占用CPU的百分比

0.0 hi 表示cpu服务于硬件中断所耗费的时间总额

0.0 si 表示cpu服务于软件中断所耗费的时间总额 0.0 st表示虚拟机被hypervisor偷去的cpu时间。(另外,如果是多内核设备,可按下数字键"1" 来切换成不同cpu的负载率)

第四五行

cpp 复制代码
MiB Mem :   1750.8 total,    100.4 free,   1241.1 used,    576.3 buff/cache
MiB Swap:   2048.0 total,   2026.2 free,     21.8 used.    509.7 avail Mem 

total系统的内存大小;free目前空余内存大小;used已经使用的内存大小

2)进程信息区

cpp 复制代码
PID  USER      PR   NI VIRT     RES     SHR S  %CPU  %MEM    TIME+ COMMAND 
3108 root      20   0  226012   4232   3348 R   1.9   0.2   0:00.07 top                                             

VIRT:进程使用的虚拟内存总量,单位为KB

RES:进程使用的、未被换出的物理内存大小,单位KB

SHR:共享内存大小,单位KB

S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停 止,Z表示僵死进程

%CPU:上次更新到现在的CPU时间占用百分比

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

TIME+:进程总计使用的CPU时间,单位为1/100秒

COMMAND:正在运行进程的命令名或者命令路径

3)交互式命令(重要)

在top执行过程中可以使用的按键命令:

h或? 显示帮助信息,给出交互式命令的一些说明

k 终止一个进程

i 忽略闲置进程和僵死进程(开关式命令)

s 改变top输出信息两次刷新的时间,单位为秒

o或O 改变top输出信息中显示项的顺序,按小写的a-z键可以将相应的列向右移动,而按大写的 A-Z键可以将相应的列向左移动。最后按enter确定

m 切换显示内存信息

t 切换显示进程和CPU状态信息

r 重新设置一个进程的优先级(输入正值将使优先级降低,默认值10)

l 切换平均负载和启动时间信息

q 退出top显示

c 切换显示完整命令行和命令名称信息

M 根据驻留内存大小进行排序输出

N 以PID来排序

P 根据CPU使用百分比大小进行排序输出

T 根据时间/累计时间进行排序输出

S 切换到累计模式

W 将当前top设置写入~/.toprc文件中

三、信号控制进程

XML 复制代码
# 列出所有支持的信号
[root@localhost ~]# kill -l

常用的信号

编号 信号名

1 SIGHUP 重新加载配置

2 SIGINT 键盘中断^C

3 SIGQUIT 键盘退出

9 SIGKILL 强制终止

15 SIGTERM 终止(正常结束),缺省信号

18 SIGCONT 继续

19 SIGSTOP 停止

20 SIGTSTP 暂停^Z(放在后台)

给进程发送信号

Lua 复制代码
[root@localhost ~]# ps -ef |grep python
root        1070       1  0 09:07 ?        00:00:00 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
root        2996       1  0 09:08 ?        00:00:02 /usr/bin/python3 /usr/libexec/rhsm-service
root        3931    3884  0 10:39 pts/4    00:00:00 python test.py
root        3933    3466  0 10:40 pts/1    00:00:00 grep --color=auto python
[root@localhost ~]# 
[root@localhost ~]# kill -20  3931    # 暂停3931这个进程
[root@localhost ~]# kill -18  3931    # 恢复3931这个进程
[root@localhost ~]# kill -19  3931    # 停止3931这个进程

# 关掉所有有关python的进程
[root@localhost ~]# killall python

四、作业控制

一个命令行功能,允许一个shell实例来运行和管理多个命令。如果没有作业控制,父进程 fork()一个子进程后,将sleeping,直到子进程退出。使用作业控制,可以选择性暂停,恢复,以及异步运行命令,让 shell 可以在子进程运行期间返回接受其他命令。

foreground: 前台进程是在终端中运行的命令,该终端为进程的控制终端。前台进程接收键盘产生的输 入和信号,并允许从终端读取或写入到终端。

background: 后台进程没有控制终端,它不需要与终端交互。

cpp 复制代码
# 运行程序时,让其在后台执行,返回一个作业id号
# &表示在后台工作
[root@localhost ~]# sleep 3000 &
[1] 7652

# 快捷键CTRL+Z可以将前台的任务放在后台中暂停
[root@localhost ~]# sleep 4000

^Z
[2]+  Stopped                 sleep 4000

# 查看有关sleep的进程信息
[root@localhost ~]# ps aux | grep sleep
root        7652  0.0  0.0 220952  1024 pts/0    S    18:25   0:00 sleep 3000
root        7655  0.0  0.0 220952  1020 pts/0    T    18:25   0:00 sleep 4000
root        7657  0.0  0.1 221664  2244 pts/0    S+   18:26   0:00 grep --color=auto sleep

# 查看当前终端放在后台的进程(jobs)
# +表示最近被放到后台的工作,-表示最近第二个被放到后台中的工作,超过第三个就不会有+/-符号存在了
[root@localhost ~]# jobs
[1]-  Running                 sleep 3000 &       
[2]+  Stopped                 sleep 4000

# 让作业2在后台继续运行
[root@localhost ~]# bg %2
[2]+ sleep 4000 &

# 将作业1调回到前台
[root@localhost ~]# fg %1
sleep 3000

# kill 1,终止作业工作号为1的进程
[root@localhost ~]# kill %1
[root@localhost ~]# jobs
[2]+  Running                 sleep 4000 &
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式