Linux系列之进程管理
前言
进程是正在运行的程序,Linux系统通常有数百个进程同时运行。本文就来介绍下Linux是如何进行进程管理的。
我们可以看到:
- 查看进程(Viewing processes)
- 查找进程(Finding processes)
- 管理进程(Managing processes)
- 进程的优先级(Prioritizing processes)
- 杀死进程(Killing processes)
- 在后台运行进程(Running processes in the background)
- 调度进程(Scheduling processes)
查看进程
ps
Linux内核在创建进程时,会按顺序给每个进程分配一个唯一的进程ID(PID)。一般来说,在进程上执行任何操作,我们必须指定PID,有时我们可以使用名称。
ps
命令是查看进程的主要工具。不使用任何选项来运行该命令,会列出当前登录用户所启动(调用)的进程,以及终端上正在运行的进程。
如果我们添加了aux
选项:
a
= 显示所有用户的进程u
= 显示进程的用户/所有者x
= 显示未连接到终端的进程
image.png
进程按照它们被启动的顺序进行展示,因此你会看到列表是根据PID进行排序的。
让我们简单来看看下面几列的信息:
USER
:调用进程的用户。PID
:进程的ID。%CPU
:进程占用CPU的百分比。%MEM
:进程占用内存的百分比。COMMAND
:启动进程的命令。
查找命令
grep
我们可以使用grep
命令来查找指定的进程,假设我们想要查找所有名称中包含mfsconsole
的进程。
ps aux | grep msfconsole
image.png
top
我们可以使用top
命令来动态地罗列出,按照资源使用情况排序的进程,从最大的开始罗列。默认情况下,该列表将每3秒刷新一次。
top
image.png
管理进程
优先级
内核对进程的优先级有最终决定权,但是我们可以使用nice
命令,来建议应该提升进程的优先级。nice
命令的值范围是从-20(最有可能得到优先权)到+19(最不可能得到优先权)。
较高的nice
值转换为低优先级,较低的nice
值转换为高优先级。
当一个进程启动后,所有的标准进程都以nice
值0来进行启动。
我们可以使用nice
命令来设置一个进程启动时的nice
值,我们可以使用renice
来调整一个运行中的进程的nice
值。
当我们使用nice
命令启动一个进程但没有提供任何值时,默认的nice
值是10。
nice
命令要求你递增nice
值,renice
命令想要一个绝对的nice
值。
设置优先级
我们可以使用nice
命令来调整一个程序的nice
值。这允许我们提高或降低内核提供给该进程的优先级,相对于其他进程而言。
在左边,我执行watch -n1 free
来展示系统内存使用情况的细节。在右边,我让top
命令运行,你可以看到watch
命令的PID
是9717,nice
的值为0。
image.png
让我们继续执行watch
命令,只不过这次是用nice
命令。
nice -15 watch -n1 free
image.png
现在我们可以看到watch
的nice
值为15。这里要牢记的几件事:
- 这个
watch
命令的PID
与之前的watch
命令不同。这是因为nice
会启动一个新的进程,而不是更改一个现有的进程。 nice
命令后面的-15
意味着15
。如果我们想要指定一个负数(高优先级),我们可以使用双中划线-
。- 下面是执行
sudo nice --10 watch -n1 free
后的样子。是的,如果你要提高优先级,你必须使用sudo
。任何人都可以降低优先级,但只有sudo
可以提高优先级。
image.png
改变优先级
renice
命令接收-20
到19
的绝对值,并接收进程的PID
。
让我们再次运行watch
命令。
watch -n1 free
让我们来检查下nice
值,既然我们没有指定nice
值,它应该为0。比起使用top
,这里我将会使用ps
和grep
,用以简化输出。
image.png
我们可以看到,第八列的值为0,该值为nice
的值,PID
的值位于第三列。让我们使用renice
试试:
sudo renice -15 14318
image.png
我们可以看到,现在nice
的值是-15。我们也可以使用top
工具来改变nice
值。
在top
中,按下R
键,并提供一个PID
:
image.png
按下回车键,并提供一个新的nice
值:
image.png
top
成功的改变了nice
值:
image.png
杀死进程
kill
你可以通过kill
命令来停止一个有问题的进程。kill
命令有64种不同的kill
信号,以及语法是kill -signal PID
。如果没有显示的提供信号位,将会默认为SIGTERM
。这里我将重点介绍以下几种:
信号名称 | 数值 | 描述 |
---|---|---|
SIGHUP | 1 | 挂断(HUP)信号。它停止指定的进程,并以相同的PID重新启动它。 |
SIGINIT | 2 | 中断(INT)信号。这是一个微弱的kill信号,不保证能起作用,但确实有这样的情况。 |
SIGQUIT | 3 | 核心转储。终止进程并将进程信息保存在内存中,然后它将这些信息保存在当前工作目录下一个名为core的文件中。 |
SIGTERM | 15 | 终止(TERM)信号。它是kill命令的默认kill信号。 |
SIGKILL | 9 | 这是一个绝对的kill信号。它通过将进程的资源发送到一个特殊的设备/dev/null来迫使进程停止。 |
下面的命令会通过HUP信号来重启我们的watch
命令。
kill -1 14318
下面的命令会确保进程被终止。
kill -9 16318
如果我们不知道PID
,我们可以使用killall
命令,它接收进程的名称。
killall -9 watch
image.png
在后台运行进程
&
当你执行一个命令时,shell
会进行等待,直到命令完成后才提供另一个命令提示。我们可以在后台运行一个进程,它将继续运行而不需要终端,把终端腾出来做其他工作。我们在命令的末尾添加&
来做到这一点。
geany sample.txt &
image.png
geany
不再占用整个终端。
fg
我们如何让它回到前台?可以使用带有PID的fg
命令。
fg 18345
bg
你也可以使用bg
命令来移动一个进程到后台。
bg 18345
调度进程
在Linux中,我们可以使用at
和crond
来调度进程。crond
有点复杂,这里重点介绍at
。
at
at
命令对于安排一项工作在未来某个时间点运行一次很有用。它设置了atd
守护进程。守护进程是一个位于后台的程序,在没有任何用户界面的情况下做自己的事情。
下面是at
命令执行进程的时间的语法,时间可以以多种格式提供。
时间格式 | 含义 |
---|---|
at 7:20pm | Run at 7:20 PM of current day. |
at 7:20pm June 25 | Run at 7:20 PM on June 25 |
at now + 20 minutes | Run in 20 minutes |
at 7:25pm 06/10/2021 | Run at 7:25 pm on June 10, 2021 |
at noon
image.png
我们可以看到,at
将我们带入了交互模式,在这里我们输入了我们希望在指定时间执行的命令。完成后按下CTRL+D。
atq
使用atq
来罗列出所有预定的at
工作。
image.png
参考资料
[1]
https://www.madebygps.com/an-intro-to-process-management-linux/: https://www.madebygps.com/an-intro-to-process-management-linux/
相关文章
- 怎么安装linux和win10双系统,在Win10下安装Linux双系统的方法
- 管理Linux下磁盘剩余空间管理技巧(linux磁盘剩余空间)
- 络管理Linux 用于运维和网络管理的优势(linux运维网)
- 探索Linux中echo的含义(linux中echo意思)
- Linux下共享存储的管理与应用(linux共享存储管理)
- Linux下的Git版本控制管理实战(linux的git)
- 优化Linux系统:CPU类型选择(linuxcpu类型)
- 行以C语言实现Linux命令行精彩之旅(c语言实现linux命令)
- Linux下的更改记录管理实践(linux修改记录)
- Linux下关闭防火墙的命令简明教程(关闭防火墙linux命令)
- 深入了解Linux的编码方式(linux编码方式)
- 打印机服务:Linux上的访问与管理(打印机服务linux)
- 自学Linux:一步一步享受乐趣(怎么自学linux)
- 编程基于C语言的Linux编程实践(基于c的linux)
- Linux文件权限设定:安全管理的关键(linux文件权限设定)
- Linux进程启动参数:扩展能力以及优化表现(linux进程启动参数)
- 【Linux下批量重命名的方法】(批量重命名linux)
- 如何在IBM设备上启动Linux系统(linux启动ibm)
- Linux常用域名解析命令汇总,让你更好的管理你的网络资源(linux域名解析命令)
- Linux进程日志管理与分析(linux进程日志)
- Linux: 拥有无限潜力的动力源(linux功率)
- Linux中文件执行命令的指引(linux执行文件的命令)
- Linux下重启机器的正确命令(linux机器重启命令)
- Linux下实现进程管理的命令行指南(linux进程管理命令)
- 让Linux有效实现时间管理(linux时间段)
- 轻松实现用户管理:Linux脚本添加用户(linux脚本添加用户)
- 在Linux下使用pip指令管理Python软件包(linux下pip命令)
- Linux下查看进程的简单方法(linux怎么看进程)