• 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

    现在我们可以看到watchnice值为15。这里要牢记的几件事:

    • 这个watch命令的PID与之前的watch命令不同。这是因为nice会启动一个新的进程,而不是更改一个现有的进程。
    • nice命令后面的-15意味着15。如果我们想要指定一个负数(高优先级),我们可以使用双中划线-
    • 下面是执行sudo nice --10 watch -n1 free后的样子。是的,如果你要提高优先级,你必须使用sudo。任何人都可以降低优先级,但只有sudo可以提高优先级。

    image.png

    改变优先级

    renice命令接收-2019的绝对值,并接收进程的PID

    让我们再次运行watch命令。

    watch -n1 free
    

    让我们来检查下nice值,既然我们没有指定nice值,它应该为0。比起使用top,这里我将会使用psgrep,用以简化输出。

    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中,我们可以使用atcrond来调度进程。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

  • 相关阅读:
    学习总结week6_1excel入门
    【JVM】G1垃圾回收器简述
    【Linux】Linux命令大全——解压、目录、文件、搜索等
    Spring Boot 如何实现单点登录(SSO)
    final关键字
    SpringBoot2.0集成WebSocket,多客户端
    人工智能技术
    生成树协议STP、RSTP、MSTP原理是什么?三者有啥区别?一文带你了解!
    Creo 9.0 基准特征:基准点
    Linux系统--------内核参数调优、一键安装nginx、tomcat调优
  • 原文地址:https://www.cnblogs.com/chuckQu/p/16535426.html