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

news2025/1/21 0:52:52

目录

一、概念

二、查看进程

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)查看指定的进程信息

[root@localhost ~]# ps aux |grep sshd
[root@localhost ~]# cat /run/sshd.pid
1210

# 查看远程连接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来进行查看检测

[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)信息统计区:

第一行为任务队列信息

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表示满负载)

第二行

Tasks: 315 total,   2 running, 313 sleeping,   0 stopped,   0 zombie

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

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

第三行

%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的负载率)

第四五行

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)进程信息区

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文件中

三、信号控制进程

# 列出所有支持的信号
[root@localhost ~]# kill -l

常用的信号

编号 信号名

1    SIGHUP 重新加载配置

2    SIGINT 键盘中断^C

3    SIGQUIT 键盘退出

9    SIGKILL 强制终止

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

18  SIGCONT 继续

19  SIGSTOP 停止

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

给进程发送信号

[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: 后台进程没有控制终端,它不需要与终端交互。

# 运行程序时,让其在后台执行,返回一个作业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 &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1064098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

假期AI新闻热点:亚运会Al技术亮点;微软GPT-4V论文精读;Perplexity推出pplx-api;DALL-E 3多渠道测评 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f525; 科技感拉满&#xff0c;第19届杭州亚运会中的Al技术亮点 八年筹备&#xff0c;杭州第19届亚运会开幕式于9月23日晚隆重举行&#xff0…

口袋参谋:如何有效地监测你的竞争对手!

​在淘宝天猫上开店&#xff0c;竞争是非常大的&#xff0c;那么就会出现许多同样的产品&#xff0c;如果想要在竞争中胜出&#xff0c;就需要多去研究同行的数据&#xff0c;知己知彼&#xff0c;百战百胜。 掌握竞争对手数据目的主要是有2个&#xff1a; 1、掌握对手是怎么起…

【二叉树】的实现

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

竞赛选题 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

中断:ZYNQ

整个中断系统架构中&#xff0c;只包含以下三种中断&#xff1a;  软件生成中断(Software Generated Interrupts&#xff0c;SGI)  私有外设中断(Private Peripheral Interrupts&#xff0c;PPI)  共享外设中断(Shared Peripheral Interrupts&#xff0c;SPI) 每种中断…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署DjangoBlog个人博客系统

华为云云耀云服务器L实例评测&#xff5c;云耀云服务器L实例部署DjangoBlog个人博客系统 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、DjangoBlog介绍2.1 DjangoBlog介绍2.2 DjangoBlog特点 三、本次实践介绍3.1 本次实践简介3.2 本次环…

java socket实现代理Android App

实现逻辑就是转发请求和响应。 核心代码 // 启动代理服务器private void startProxyServer() {new Thread(new ProxyServer()).start();}// 代理服务器static class ProxyServer implements Runnable {Overridepublic void run() {try {// 监听指定的端口int port 8098; //一…

AutoGen - 多个Agent开发LLM应用的框架

文章目录 关于安装使用关于 Enable Next-Gen Large Language Model Applications 用多个Agent开发LLM应用的框架,这些agent可相互交流以解决任务。 官网:https://microsoft.github.io/autogen/github : http://github.com/microsoft/autogendiscord : https://discord.com/i…

LVGL_基础控件滚轮roller

LVGL_基础控件滚轮roller 1、创建滚轮roller控件 /* 创建一个 lv_roller 部件(对象) */ lv_obj_t * roller lv_roller_create(lv_scr_act()); // 创建一个 lv_roller 部件(对象),他的父对象是活动屏幕对象// 将部件(对象)添加到组&#xff0c;如果设置了默认组&#xff0c…

buuctf-crypto 1

rsarsa 题目描述 Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.p 96484230290105156765905517400104265349457376392357398006439893520398525072984913995610350091634270503701075707336333…

Java循环队列

目录 一、循环队列 二、设计循环队列 一、循环队列 队列&#xff1a;只能在一端进行插入数据操作&#xff0c;另一端进行删除数据操作的特殊线性表&#xff0c;是一种先进先出的存储结构 插入操作的一端为队尾&#xff0c;删除操作的一端为队头 在线性队列中&#xff0c;一…

leetcode 62. 不同路径、63.不同路径||

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&…

课题学习(三)----倾角和方位角的动态测量方法(基于陀螺仪的测量系统)

一、内容介绍 该测量系统基于三轴加速度和三轴陀螺仪&#xff0c;安装在钻柱内部&#xff0c;随钻柱一起旋转&#xff0c;形成捷联惯性导航系统&#xff0c;安装如下图所示&#xff1a;   假设三轴加速度和陀螺仪的输出为: f b [ f x f y f z ] T f^b\begin{bmatrix}f_{x} …

C++ 学习系列 -- std::list

一 std::list 介绍 list 是 c 中的序列式容器&#xff0c;其实现是双向链表&#xff0c;每个元素都有两个指针&#xff0c;分别指向前一个节点与后一个节点 链表与数组都是计算机常用的内存数据结构&#xff0c;与数组连续内存空间不一样的地方在于&#xff0c;链表的空间是不…

Springboot实现登录功能(token、redis、登录拦截器、全局异常处理)

登录流程&#xff1a; 1、前端调用登录接口&#xff0c;往接口里传入账号&#xff0c;密码 2、根据账号判断是否有这个用户&#xff0c;如果有则继续判断密码是否正确 3、验证成功后&#xff0c;则是根据账号&#xff0c;登录时间生成token&#xff08;用JWT&#xff09; 4、将…

64位Office API声明语句第111讲

跟我学VBA&#xff0c;我这里专注VBA, 授人以渔。我98年开始&#xff0c;从源码接触VBA已经20余年了&#xff0c;随着年龄的增长&#xff0c;越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友&#xff0c;都来学习VBA,利用VBA,起码可以提高…

企业使用SSL证书对于SEO有多重要

在当今竞争激烈的在线市场中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;是企业获得更高排名和增加网站流量的关键。在SEO策略中&#xff0c;企业使用SSL证书已经成为多重不可忽视的重要因素。让我们一起探究企业使用SSL证书对于SEO的重要性。 首先&#xff0c;搜索引…

socket.error: [Errno 10049]错误

今天在pycharm运行rl_server_no_training.py欲启动服务器时&#xff0c;却出现如下错误 Traceback (most recent call last):File "xxx/rl_server_no_training.py", line 333, in <module>main()File "xxx/rl_server_no_training.py", line 326, in…

【C++】运算符重载 ⑧ ( 左移运算符重载 | 友元函数 / 成员函数 实现运算符重载 | 类对象 使用 左移运算符 )

文章目录 一、左移运算符重载1、友元函数 / 成员函数 实现运算符重载2、类对象 使用 左移运算符3、左移运算符 << 重载 二、完整代码示例 一、左移运算符重载 1、友元函数 / 成员函数 实现运算符重载 运算符重载 的正规写法一般都是 使用 成员函数 的形式 实现的 ; 加法…

DLRover - 小记

文章目录 关于 DLRover 关于 DLRover github : https://github.com/intelligent-machine-learning/dlrover DLOver使大型人工智能模型的分布式训练变得简单、稳定、快速和绿色。 它可以在分布式集群上自动训练深度学习模型。 它帮助模型开发人员专注于模型结构&#xff0c;而…