Linux---进程管理

本章主要介绍RHEL8中如何管理并查看进程。

  • 了解进程并查看系统中存放的进程
  • 了解进程的信号
  • 进程优先级设置

进程介绍 

在 Windows中打开任务管理器就可以查看到系统中的所有进程,如图下图所示。

  这里列出了系统中所有的进程,不过也可以使用命令行工具来查看进程。每个进程都会有 一个 Process ID,简称为PID。 


查看进程 

  也可以使用ps命令来查看系统中的进程,当执行不加任何选项的ps命令时,显示的是当前终端的进程,命令如下。 

[root@rhel03 ~]# psPID TTY          TIME CMD1904 pts/0    00:00:00 bash3828 pts/0    00:00:00 ps
[root@rhel03 ~]#

使用ps命令查看当前终端的进程,如下图所示。

  有很多进程不属于任何终端,这些进程都是后台进程。如上图所示,在终端1中运行了 A、B两个进程,当在终端1中执行ps命令时只能看到终端1上的三个进程(包括ps本身),看 不到其他终端及后台进程。如果想查看系统中的所有进程,就需要加上选项了。 

  基本上不同版本的UNIX系统上都有自己的ps命令,但是这些命令却没有一个统一的选项约定,Linux中的ps命令应尽可能地包括所有的这些选项以适应不同UNIX背景的人群。所 以,Linux中 ps包括了UNIX风格和Linux风格的选项,最常见的用法包括ps aux 和 ps -ef。 ps aux可以列出系统中所有的进程,如下所示。

[root@rhel03 ~]# ps -aux | head
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.7 176156 14416 ?        Ss   05:54   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root           2  0.0  0.0      0     0 ?        S    05:54   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   05:54   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   05:54   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<   05:54   0:00 [kworker/0:0H-events_highpri]
root           9  0.0  0.0      0     0 ?        I<   05:54   0:00 [mm_percpu_wq]
root          10  0.0  0.0      0     0 ?        S    05:54   0:00 [ksoftirqd/0]
root          11  0.0  0.0      0     0 ?        R    05:54   0:00 [rcu_sched]
root          12  0.0  0.0      0     0 ?        S    05:54   0:00 [migration/0]
[root@rhel03 ~]# 

因为ps aux显示内容太多,所以这里通过head只截取前10行,这里每列的含义如下。 

  • USER:进程所属用户。 
  • PID:进程ID。
  • %CPU:进程占用CPU百分比。
  • %MEM:进程占用内存百分比。
  • VSZ:虚拟内存占用大小(单位:KB)。
  • RSS:实际内存占用大小(单位:KB)。
  • TTY:终端类型。
  • STAT:进程状态。
  • START:进程启动时刻。
  • TIME:进程运行时长。
  • COMMAND:启动进程的命令。

TTY一列如果是“?”,则说明是后台进程。 

练习:下面练习查看进程信息,先在系统中打开一个Firefox浏览器,如下图所示。

在执行此命令时,grep命令中也含有firefox关键字,所以也找出来了,明显 grep那行并 不是我们想要的,一般可以再加上 grep -v grep过滤,命令如下。 

 可以看到,Firefox主进程的PID是4436,其他几个是对应的子进程。

找出某进程的PID 除使用以上方法外,还可以使用pgrep命令,用法如下。

  • pgrep 名称 

例如,现在要查看Firefox的PID,命令如下。 

[root@rhel03 ~]# pgrep firefox
4436
[root@rhel03 ~]# 

  这里只查看到了Firefox主进程的PID,如果要看到每个子进程的PID,需要加上 -f 选项, 命令如下。 

[root@rhel03 ~]# pgrep -f firefox
4436
4700
4726
4803
4818
5086
[root@rhel03 ~]#

除了pgrep,也可以使用pidof命令,命令如下。 

[root@rhel03 ~]# pidof firefox
5086 4818 4803 4726 4700 4436
[root@rhel03 ~]# 

pidof和 pgrep的区别在于,pidof必须跟上完整的名称pgrep则不需要,命令如下。 

[root@rhel03 ~]# pgrep -f firef
4436
4700
4726
4803
4818
5086
[root@rhel03 ~]#

  pgrep会把进程COMMAND中含有firefo的进程的PID全部找出来,pidof找的是 COMMAND为firefo的。 

  对于ps 来说,查看的是执行命令那一瞬间的情况,如果想动态地查看进程,则可以使用 top命令。默认情况下,top每隔3秒更新一次,可以用-d选项来指定更新间隔,例如,1秒 更新一次可以用top-d1指定,如下图所示。 

 按【q】键退出。 


发送信号 

  关团一个正在运行的程序时,本质上是系统给此程序对 应的进程发送一个关闭信号。不同的关闭方式,信号是不一样的,查看系统有多少信号可以 使用kill -l命令进行查看,如下所示。

[root@rhel03 ~]# kill -l1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
[root@rhel03 ~]# 

  也可以使用kill命令手动给进程发送信号,这里介绍3个常用的信号:15号信号、9号信号 和2号信号。

  15号信号,当单击右上角的【关闭】按钮去关闭一个程序时,系统发送的就是15号信号,这也是默认信号。在命令行中使用kill命令时,如果不指定信号,则是15号信号。 

在后台运行sleep命令,同时也显示了进程的PID,如下所示。

[root@rhel03 ~]# sleep 1000 &
[1] 5904
[root@rhel03 ~]# 

可以看到,sleep进程的PID是5904。下面给这个进程发送一个9号信号,命令如下。 

[root@rhel03 ~]# kill 5904
[root@rhel03 ~]# 
[1]+  已终止               sleep 1000
[root@rhel03 ~]#

  2号信号,当我们按【Ctrl+C】组合键时,本质上就是发送了一个2号信号。运行 sleep命 令,后面没有加&就是放在前台运行,命令如下。 

[root@rhel03 ~]# sleep 1000
^C
[root@rhel03 ~]# 

按【Ctrl+C】组合键会终止正在运行的程序,即对对应的进程发送2号信号。

再次运行sleep命令,并把它放在后台运行,命令如下 

[root@rhel03 ~]# sleep 1000 &
[1] 5922
[root@rhel03 ~]# 

这里sleep进程的PID是5922,给这个进程发送一个2号信号,命令如下。 

[root@rhel03 ~]# kill -2 5922
[root@rhel03 ~]# 
[1]+  中断                  sleep 1000
[root@rhel03 ~]# 

当一个程序关不掉时,需要强制关闭,此时可以对进程发送9号信号,命令如下。 

[root@rhel03 ~]# sleep 1000 &
[1] 5932
[root@rhel03 ~]# kill -9 5932
[root@rhel03 ~]# 
[1]+  已杀死               sleep 1000
[root@rhel03 ~]#

这样就强制关闭了。

  使用kill命令后面需要跟上进程的PID,这里还需要查找出进程的PID,如果想直接杀死某个运行的程序,则可以使用killall命令。先在后台运行几个程序。 

[root@rhel03 ~]# sleep 1000 &
[1] 5941
[root@rhel03 ~]# sleep 1000 &
[2] 5950
[root@rhel03 ~]# sleep 1000 &
[3] 5951
[root@rhel03 ~]# sleep 1000 &
[4] 5952
[root@rhel03 ~]# 

这里要杀死所有 sleep所对应的进程,命令如下。 

[root@rhel03 ~]# killall -9 sleep
[1]   已杀死               sleep 1000
[2]   已杀死               sleep 1000
[3]-  已杀死               sleep 1000
[4]+  已杀死               sleep 1000
[root@rhel03 ~]# 

进程优先级 

  系统中所有的进程都要消耗CPU的资源,CPU 会为每个进程分配一个时间片,轮到某进 程时CPU会处理这个进程的请求,时间片到期,则会把进程暂停放回队列等待下一轮的时间 片。在同一颗CPU上如果运行了太多的程序就会导致CPU的资源不够,可以调整进程的优先 级,让指定进程获取更多的资源,更优先地去执行。 

  好比在驾校学车时,教练车就是CPU资源,每个学员就是一个个等待的进程。每个学员上 车练习10分钟(时间片),10分钟过了之后就要下车让下一个学员上车练习,再次练习需要等 待下一轮。如果学员太多,等待的时间就会很久。如果想多练习一会,可以让教练设置一下 优先级,别人练习一次10分钟,我练习一次2小时。

  进程的优先级由两个值决定:优先顺序(priority)和优先级(niceness))。其中优先顺序由 内核对它进行动态地更改,我们不需要做太多干预,对用户而言,只需要通过nice来修改。 nice值的取值范围是 -20~19 ,nice值越小,进程就越优先执行。

  多个进程如果运行在不同的CPU上是互不干扰的,不会发生抢资源的情况,进程只有运行 在同一颗CPU上才会发生资源抢占的情况。所以,做实验时要确保多个进程是运行在同一颗 CPU上的。首先查看一下CPU 的情况,命令如下。 

[root@rhel03 ~]# lscpu
架构:           x86_64
CPU 运行模式:   32-bit, 64-bit
字节序:         Little Endian
CPU:             1
在线 CPU 列表:  0
每个核的线程数: 1
每个座的核数:   1
座:             1
NUMA 节点:      1
厂商 ID:        GenuineIntel
BIOS Vendor ID:  GenuineIntel
CPU 系列:       6
型号:           154
型号名称:       12th Gen Intel(R) Core(TM) i7-1255U
BIOS Model name: 12th Gen Intel(R) Core(TM) i7-1255U

可以看到我现在只有一个CPU

下面运行两个cat进程,命令如下。 

[root@rhel03 ~]# cat /dev/zero > /dev/null &
[1] 5996
[root@rhel03 ~]# cat /dev/zero > /dev/null &
[2] 6003
[root@rhel03 ~]# 

然后再打开一个终端用 top进行查看,结果如下图所示。 

  可以看到,两个cat进程消耗的CPU是差不多的,因为它们的nice值相同,可以平等地消耗CPU资源。下面使用renice修改进程5996的nice值,改为-10,命令如下。 

[root@rhel03 ~]# renice -n -10 5996
5996 (process ID) 旧优先级为 0,新优先级为 -10
[root@rhel03 ~]# 

这样进程5996会比进程6003占用更多的CPU资源,再次到top中查看,结果如下图所示。

 可以看到,5996占用的资源比6003多了很多。 

  刚才讲nice值越小越可得到更多的CPU资源,越大越不容易抢到资源,这里改成最大值19,命令如下。 

[root@rhel03 ~]# renice -n 19 5996
5996 (process ID) 旧优先级为 -10,新优先级为 19
[root@rhel03 ~]# 

然后再到 top中查看,结果如下图所示。 

可以看到,5996只获取到了很少的CPU资源。关闭cat进程,命令如下。 

关闭cat进程,命令如下。

[root@rhel03 ~]# killall -9 cat
[root@rhel03 ~]# 
[1]-  已杀死               cat /dev/zero > /dev/null
[2]+  已杀死               cat /dev/zero > /dev/null
[root@rhel03 ~]# 

  刚才是在程序运行起来之后再使用renice修改的nice值,也可以直接以某个特定的nice启动进程,只要在运行的命令前面加上“nice -n 优先级”即可,命令如下。 

[root@rhel03 ~]# nice -n 10 cat /dev/zero > /dev/null &
[1] 6068
[root@rhel03 ~]#

关闭这个cat进程,命令如下。 

[root@rhel03 ~]# killall -9 cat
[root@rhel03 ~]# 
[1]+  已杀死               nice -n 10 cat /dev/zero > /dev/null
[root@rhel03 ~]#

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

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

相关文章

leetcode刷题:611.有效三角形的个数(双指针实现)

题目地址&#xff1a;有效三角形的个数 解决此题时&#xff0c;首先需要知道的是如何判断三个数字是否能够构成三角形。 我们知道&#xff0c;三角形任意两边之和都大于第三边。所以判断三个数字是否能构成三角形需要进行三次比较&#xff08;最基础的思路&#xff09; 方法一…

高精度加法,减法,乘法,除法(上)(C语言)

前言 加&#xff0c;减&#xff0c;乘&#xff0c;除这些运算我们自然信手捏来&#xff0c;就拿加法来说&#xff0c;我们要用c语言编程算ab的和&#xff0c;只需让sum ab即可&#xff0c;可是这是局限的&#xff0c;我们都知道int的表示的最大值为2147483647&#xff08;32位…

kepler.gl部署在线说明文档

1 概述 1.1 介绍 1、Kepler.gl 是一个强大的开源地理空间分析工具&#xff0c;用于大规模数据集的可视化。它由 Uber 的数据可视化团队开发&#xff0c;并且是基于 Web 技术构建的。Kepler.gl 涉及到以下几个主要技术领域&#xff1a; WebGL: Kepler.gl 通过 WebGL 进行渲染…

WVP-RPO开源项目搭建实践

0.拉取代码 GitHub - 648540858/wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联&#xff0c;支持rtsp/rtmp等视频流转发到国标平台&…

解锁全球潜力:IT外包解决跨国企业海外分支的IT需求

在全球化的浪潮中&#xff0c;跨国企业为了拓展业务辐射面&#xff0c;经常在世界各地设立海外分支。然而&#xff0c;这些分支机构面临着独特的挑战&#xff0c;其中包括解决复杂的IT需求。为了更高效地应对这些挑战&#xff0c;越来越多的企业正在转向IT外包&#xff0c;以便…

sqlserver已经启动了允许远程连接,但局域网内无法访问

sqlserver已经启动了允许远程连接&#xff0c;但局域网内无法访问。 可以确认一下sqlserver browser是不是没有启动。 修改启动模式为自动试一试。

【java】Java程序员,你掌握了多线程吗?

摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流量洪峰&#xff0c;背后都离不开多线程技术的支持。在数字化转型的过程中&#xff0c;高并发、高性能是衡量系统性能的核心指…

科技云报道:DDR5火了!揭开下一代超高速内存的秘密

科技云报道原创。 在最新的存储市场动态中&#xff0c;存储芯片大厂的减产策略显现出其效果&#xff0c;特别是在DDR内存领域。 根据台湾工商时报的最新报道&#xff0c;第四季度的内存芯片合约价格出现了超出预期的上涨。 这一价格变动尤其在DDR5芯片上表现突出&#xff0c…

使用Redis构建简易社交网站(2)-处理用户关系

目的 本文目的&#xff1a;实现用户关注和取消关注功能。&#xff08;完整代码附在文章末尾&#xff09; 相关知识 在我之前的文章 《使用Redis构建简易社交网站(1)-创建用户与动态界面》中提到了如何实现简易社交网站中创建新用户和创建新动态功能。 那这篇文章将教会你掌…

第二证券:政策稳预期强信心 民间投资结构性亮点纷呈

民营经济是中国特色社会主义商场经济的重要组成部分&#xff0c;是推动中国式现代化和高质量展开的生力军。本年以来&#xff0c;国内外环境仍然复杂多变&#xff0c;我国民营企业展开耐性不减。受访专家标明&#xff0c;跟着支撑民营经济展开的系列严峻抉择计划安置执行落地&a…

js vue 输入正确手机号/邮箱后,激活“发送验证码”按钮

按钮禁止点击状态&#xff1a; 按钮能够点击状态&#xff1a; 我采用的方式是监听手机号/邮箱输入框的输入事件&#xff0c;即实判断用户输入的数据是否满足规则&#xff0c;如果满足手机号/邮箱规则&#xff0c;则激活“获取验证码”按钮。 话不多说&#xff0c;上代码 样式…

pWnOS v2.0

该靶机绑定了静态IP地址 10.10.10.100&#xff0c;所以这里需要修改我们的网络配置&#xff01;整个网段修改为10.10.10.0/24 信息收集 主机存活探测 arp-scan -l 端口信息探测 nmap -sT --min-rate 10000 -p- 10.10.10.100 &#xff08;只开放了22 80端口&#xff09; 服务…

运行时更改Android应用程序图标

设想一下&#xff0c;当我们正在开发一款应用。随着某个节日的临近&#xff0c;我们可能希望通过更改应用图标来增强用户的节日氛围&#xff0c;例如在图标上添“新年特惠”或者“龙年大吉”等标签。 这种小小的改变看似不经意&#xff0c;却能够吸引用户的注意。 运行时更改应…

Windows离线安装Node-Red

在线安装Node-Red 参考文章 步骤 安装Nodejs使用nmp安装Node-Red先在本地安装Node-red将本地的Node-red拷贝到远程 安装Nodejs 在nodejs中文网下载长期支持的Windows安装包&#xff0c;并进行安装 安装完成后为nodej添加环境变量&#xff0c;环境变量的地址为安装目录。 …

哔哩哔哩自动引流软件,其成果展示与开发流程和代码分享

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 哔哩哔哩自动引流软件的开发流程和代码分享 一、开发背景 随着互联网的发展&#xff0c;越来越多的用户喜欢在哔哩哔哩平台寻找感兴趣的内容。为了更好地满足这部分用户的需求&a…

关系数据库和非关系数据库相机

目录 1、数据库介绍2、关系数据库2.1 Mysql2.2 PostgreSQL2.3 Mysql和PostgreSQL的区别 3、非关系数据库3.1 Redis3.2 MongoDB3.3 MongoDB和Redis的区别3.4 MongoDB和Mysql的区别 4、结构化数据、非结构化数据和半结构化数据5、 后端技术群 1、数据库介绍 关系数据库和非关系数…

【2023年网络安全优秀创新成果大赛专刊】医疗机构临床数据合规共享解决方案(美创科技)

“2023年网络安全优秀创新成果大赛”由中央网信办网络安全协调局指导&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;主办。本次大赛由3场分站赛、3场专题赛、1场大学生创新创业作品赛组成。 在杭州分站赛&#xff0c;美创科技—“医疗机构临床合规共享解决方案…

Docker的数据卷、数据卷容器,容器互联

数据卷&#xff08;容器与宿主机之间数据共享&#xff09; 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立刻可见&#xff0c;并且更新数据不会影响镜像&#xff0c;从而实现数据在宿主机与容器之…

借用gpt帮自己写个抓取某网站房源信息,业绩翻倍

作为一名销售不可怕&#xff0c;作为一个程序员不可怕&#xff0c;但作为一个会写代码的房产销售就很可怕了。不管是做什么都需要动脑筋&#xff0c;会使很多事情相对简单&#xff0c;这不&#xff0c;最近这业绩搞的自己扛不住&#xff0c;主要是平时很懒&#xff0c;都是坐等…

简单易懂:Axios 如何取消请求的两种方法

在前端开发中&#xff0c;网络请求是非常常见的操作。而有时候&#xff0c;我们可能需要在发送请求后取消它&#xff0c;比如用户在请求还未完成时离开了当前页面或者执行了其他操作&#xff0c;本文将介绍如何在使用 Axios 发送请求时取消这些请求。 基本概念 在 Axios 中&am…