linux进程管理

linux · 浏览次数 : 9

小编点评

进程管理是操作系统中的一项重要功能,它涉及到对程序的创建、调度、同步和通信等方面。进程是操作系统分配资源和调度的基本单位,而线程则是进程中的一个执行单元,可以并发地执行多个任务。 ### 进程 进程是指在操作系统中有独立功能的程序关于某个数据集合的一次运行活动。它可以分为狭义进程和广义进程: 1. **狭义进程**:指进程就是一段程序的执行过程。 2. **广义进程**:指进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 进程的主要特征包括: - **进程ID**:每个进程都有一个唯一的标识符(PID)。 - **父进程和子进程**:一个进程可以有多个子进程,而一个进程也只能有一个父进程。 - **状态**:进程在运行时有不同的状态,如运行(R)、休眠(S)、停止(T)等。 - **资源占用**:进程会占用CPU、内存等资源。 ### 线程 线程是进程中的一个执行单元,负责当前进程中程序的执行。一个进程中至少有一个线程,也可以有多个线程,这种多线程程序也被称为多线程程序。 线程的主要特征包括: - **线程ID**:每个线程都有一个唯一的标识符。 - **进程**:线程属于进程的一个执行单元。 - **执行顺序**:线程按照特定的顺序执行任务。 - **资源共享**:线程可以共享进程的资源,如文件句柄、信号量等。 ### 进程管理工具 - **pstree**:以树状结构显示进程信息,包括进程之间的关系。 - **top命令**:显示系统进程,可以按照CPU或内存使用资源排序。 - **ps命令**:静态查看系统进程信息,可以查看所有进程信息。 ### 进程调度 进程调度是操作系统用来决定哪个进程应该优先执行的方法。常见的进程调度算法有: - **先来先服务**:按照进程到达的顺序进行调度。 - **短作业优先**:优先执行估计运行时间短的进程。 - **优先级调度**:根据进程的优先级进行调度,优先级高的先执行。 - **轮转调度**:按照进程到达的顺序进行调度,每个进程执行一个时间片。 ### 结论 进程管理是操作系统中不可或缺的一部分,它使得多个进程能够并发地执行,提高了系统的效率和响应速度。通过使用进程管理工具和调度算法,操作系统可以更加灵活地管理和控制进程的执行。

正文

Linux进程管理

  • 什么是程序:应用程序是用户选择安装的程序的总称,通常包括驱动程序的进程,看图软件、解压缩软件等通用软件的进程.也可以顾名思义地说:应用程序就是为使用者提供与电脑沟通所开发出来的程序软件

  • 什么是进程:

    狭义定义:进程就是一段程序的执行过程。
     广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

  • 什么是线程:也叫做轻量级进程,线程是进程中的⼀个执⾏单元,负责当前进程中程序的执⾏,⼀个进程中⾄少有⼀个线程。⼀个进程中是可以有多个线程的,这个应⽤程序也可以称之为多线程程序。

【1】、查看进程树

  • pstree:以树状结构显示进程信息,包括进程之间的关系

  • option

    • -p:显示进程PID

    • -a:显示完整的命令行

    • -u:列出每个进程所属账号名称

      可以查看每一个进程是由哪些账号开启的,进程要一直开启才可以看到,进程有生命周期

    • image-20240408165232506

通过pstree命令可以去进行进程的查询。

可以通过用户查询

pstree -p 用户名

  • ps aux :unix格式静态查看系统进程,查看系统所有进程信息

    • a:显示当前终端所有进程

    • u:以用户格式输出

    • x:当前用户在所有终端下的进程

    • [root@bogon ~]# ps aux
      USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      root           1  0.1  0.3 241428 14348 ?        Ss   04:21   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
      
    • 各个字段的含义

    • USER:进程属于哪个用户
      PID:进程ID号
      %CPU:该进程占用CPU的百分比
      %MEN:该进程占用物理内存的百分比
      VSZ:进程使用掉的虚拟内存量(单位:kb)
      TTY:表示进程在那个终端运行,如果内核直接调用则显示“?”,tty1-tty6表示本机终端登录的用户进程,pts/0-255则表示远程终端登录用户的进程
      STAT:进程状态,R(running)运行,S(sleep)睡眠,s包含子进程,T(stop)停止,Z(zombie)僵尸进程, +后台进程
      START:进程启动时间
      TIME:占用CPU运算时间
      COMMAND:产生此进程的命令
      
  • ps ef :unix格式静态查看系统进程,查看系统所有进程信息

    • -e:显示当前终端所有进程

    • -f:显示最完整的进程信息

    • -l:以长格式输出

    • 查找僵尸进程

    • [root@bogon ~]# ps -e -o ppid,stat | grep Z
      

【2】、top命令

Tasks: 256 total,   1 running, 255 sleeping,   0 stopped,   0 zombie
		进程总数	正在运行的进程  休眠进程数		停止进程数		僵尸进程数

第一行:

系统本地时间

系统运行时间

用几个用户在登录

负载情况

image-20240408193624199

  • -M:按照内存使用资源排序
  • -P:按照CPU使用资源排序

【3】、进程的前后台调度

  • 前台任务

    会持续占据终端界面,直至任务的结束才会释放终端界面,在前台任务占据终端界面时,我们是不能进行任何操作的

  • 后台任务

    在后台运行的任务不会占据控制界面,我们可以执行其他的命令

  • &:将程序fangruhoutaiyunx

  • jobs -l:查看后台任务列表

  • fg 进程编号:将后台任务恢复到前台执行

  • CTRL+Z:挂起前台任务并且放入后台

  • bg 进程编号:激活后台被挂起的进程

  • [root@bogon ~]# ping baidu.com >> /dev/null &
    [1] 3230
    #将进程放入后台执行
    [root@bogon ~]# jobs -l
    [1]+  3230 Running                 ping baidu.com >> /dev/null &
    #查看后台进程
    [root@bogon ~]# fg 1
    ping baidu.com >> /dev/null
    #将后台进程放入前台执行
    ^Z
    #挂起前台任务,并放入后台
    [1]+  Stopped                 ping baidu.com >> /dev/null
    [root@bogon ~]# bg 1
    #激活
    [1]+ ping baidu.com >> /dev/null &
    [root@bogon ~]# jobs -l
    [1]+  3230 Running                 ping baidu.com >> /dev/null &
    

【4】、杀死进程

  • CTRL+C:结束当前命令程序,只能杀死前台任务,后台任务没法杀

  • kill

    • 按照PID杀死,精确的杀死一个进程

    • -l:列出可选择的信号

    • 常用信号:

      -1:重启

      -9:强制杀死,直接杀死,例如杀死僵尸进程

      -15:正常杀死,默认是-15,杀死进程时先终止,后杀死

    • [root@bogon logs]# jobs -l
      [1]   3628 Running                 sleep 2m &
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Running                 sleep 4m &
      [root@bogon logs]# kill 3628
      [root@bogon logs]# jobs -l
      [1]   3628 Terminated              sleep 2m
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Running                 sleep 4m &
      [root@bogon logs]# jobs -l
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Running                 sleep 4m &
      [root@bogon logs]# jobs -l
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Running                 sleep 4m &
      [root@bogon logs]# kill -9 3630
      [root@bogon logs]# jobs -l
      [2]-  3629 Running                 sleep 3m &
      [3]+  3630 Killed                  sleep 4m
      [root@bogon logs]# jobs -l
      [2]+  3629 Running                 sleep 3m &
      
  • killall

    • 依据进程名杀死进程

    • killall 进程名

    • [root@bogon logs]# jobs -l
      [1]   3673 Running                 sleep 5m &
      [2]-  3674 Running                 sleep 6m &
      [3]+  3675 Running                 sleep 7m &
      [root@bogon logs]# killall sleep 
      [1]   Terminated              sleep 5m
      [2]-  Terminated              sleep 6m
      [3]+  Terminated              sleep 7m
      [root@bogon logs]# jobs -l 
      
    • 强制杀死某用户所有的进程

      killall -9 -u 用户名
      
  • pkill

    • 按照终端杀死进程,-t

【5】、nice值

  • 每一个进程都会拥有一个“优先级(priority)”属性
  • 通过改变nice值,修改进程优先级
  • nice值的范围是-20~19,nice值越低优先级越高,nice默认值是0、
  • nice:在创建进程时设置nice值
  • renice:创建好进程后,重新设置nice值
[kiosk@foundation0 ~]$ ps efo  pid,command,nice
    PID COMMAND                      NI
   5890 bash SYSTEMD_EXEC_PID=2335    0
   3058 bash SYSTEMD_EXEC_PID=2335    0
   8949  \_ ps efo pid,command,nice   0
   2245 /usr/libexec/gdm-wayland-se   0
   2254  \_ /usr/libexec/gnome-sess   0

# 普通用户对于nice值只能调高(优先级只能调低),root用户对于nice值既可以调高,也可以调低
[root@servera ~]# nice -n 19 ping 127.0.0.1 > /dev/null &
[root@servera ~]# ps efo pid,command,nice
    PID COMMAND                      NI
   1519 sudo -i SHELL=/bin/bash HIS   0
   1523  \_ -bash HISTSIZE=1000 HOS   0
   1545      \_ ping 127.0.0.1 SHEL  19
   1546      \_ ps efo pid,command,   0
   1078 /sbin/agetty -o -p -- \u --   0
   1065 /sbin/agetty -o -p -- \u --   0
[root@servera ~]# renice -n 10 1545
1545 (process ID) old priority 19, new priority 10
[root@servera ~]# ps efo pid,command,nice
    PID COMMAND                      NI
   1519 sudo -i SHELL=/bin/bash HIS   0
   1523  \_ -bash HISTSIZE=1000 HOS   0
   1545      \_ ping 127.0.0.1 SHEL  10
   1548      \_ ps efo pid,command,   0
   1078 /sbin/agetty -o -p -- \u --   0
   1065 /sbin/agetty -o -p -- \u --   0
   
# 普通用户不允许调低nice值,也就是不允许将进程的优先级调高
[student@servera ~]$ ping 127.0.0.1 > /dev/null &
[1] 1577
[student@servera ~]$ 
[student@servera ~]$ 
[student@servera ~]$ ps efo pid,command,nice
    PID COMMAND                      NI
   1501 -bash USER=student LOGNAME=   0
   1577  \_ ping 127.0.0.1 SHELL=/b   0
   1578  \_ ps efo pid,command,nice   0
[student@servera ~]$ renice -n 14 1577
1577 (process ID) old priority 0, new priority 14
[student@servera ~]$ ps efo pid,command,nice
    PID COMMAND                      NI
   1501 -bash USER=student LOGNAME=   0
   1577  \_ ping 127.0.0.1 SHELL=/b  14
   1581  \_ ps efo pid,command,nice   0
[student@servera ~]$ renice -n 8 1577
renice: failed to set priority for 1577 (process ID): Permission denied

与linux进程管理相似的内容:

linux进程管理

Linux进程管理 什么是程序:应用程序是用户选择安装的程序的总称,通常包括驱动程序的进程,看图软件、解压缩软件等通用软件的进程.也可以顾名思义地说:应用程序就是为使用者提供与电脑沟通所开发出来的程序软件 什么是进程: 狭义定义:进程就是一段程序的执行过程。 广义定义:进程是一个具有一定独立功能的程

[转帖]Linux下进程管理知识(详细)总结

一、简介 本文主要详细介绍进程相关的命令的使用、进程管理及调度策略的知识。 二、常用的命令解析 1、ps命令 命令选项解析-a显示一个终端所有的进程-u显示进程的归属用户和内存占用情况-x显示没有控制终端的进程-l长格式显示更详细的信息-e显示所有进程-w宽行显示,可以使用多个w进行加宽显示 进程常

Linux:进程模型和进程管理

在Linux系统中,执行一个程序或命令就可以触发一个进程,系统会给予这个进程一个ID,称为PID,同时根据触发这个进程的用户与相关属性关系,基于这个PID一组有效的权限设置。举个常见的例子,我们要操作系统的时候通常是利用ssh连接程序或直接在主机上登录,然后获取shell。默认的shell是bash,对应的路径为/bin/bash,那么同时间的每个人登录都是执行/bin/bash,不过每个人获取的

[转帖]Linux系统:page fault

Linux进程如何访问内存 Linux下,进程并不是直接访问物理内存,而是通过内存管理单元(MMU)来访问内存资源,原因后面会讲到。 为什么需要虚拟内存地址空间 假设某个进程需要4MB的空间,内存假设是1MB的,如果进程直接使用物理地址,这个进程会因为内存不足跑不起来。既然进程不是直接访问物理内存,

[转帖]Linux内核线程kthread简介【最好的一篇!】

https://zhuanlan.zhihu.com/p/581587583 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的。内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的

[转帖]【Linux Kernel】学习预热

https://blog.yelvlab.cn/archives/614/ Linux Kernel基础知识 Kernel组成: Linux内核主要由 进程管理、内存管理、设备驱动、文件系统、网络协议栈 外加一个 系统调用。 Kernel源码组织结构 Kernel知识体系 最后修改:2021 年 0

[转帖]40张图入门Linux——(前端够用,运维入门)

本文主要是Linux的入门内容,利用40张思维导图从基础、操作、实用指令、组管理和权限管理、crond任务调度、Linux磁盘分区和挂载、Linux网络环境配置、进程管理、服务管理、RPM和YUM、软件安装关键点、Shell编程共十二部分着手,从而系统的了解一下Linux(基于Centos),本文的

[转帖]Linux命令之systemctl命令

一、systemctl命令简介 CentOS 5使用SysV init;CentOS 6使用Upstart,CentOS 7使用Systemd管理守护进程。centos7采用 systemd管理,服务独立的运行在内存中,服务响应速度快,但占用更多内存。独立服务的服务启动脚本都在目录 /usr/lib

Linux 内存管理 pt.2

哈喽大家好我是咸鱼,在《Linux 内存管理 pt.1》中我们学习了什么是物理内存、虚拟内存,了解了内存映射、缺页异常等内容 那么今天我们来接着学习 Linux 内存管理中的多级页表和大页 多级页表&大页 在《Linux 内存管理 pt.1》中我们知道了内核为每个进程都维护了一张页表,这张页表用来记

系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理

虚拟内存的主要作用是提供更大的地址空间,使得每个进程都可以拥有大量的虚拟内存,而不受物理内存大小的限制。此外,虚拟内存还可以提供内存保护和共享的机制,保护每个进程的内存空间不被其他进程非法访问,并允许多个进程共享同一份物理内存数据,提高了系统的资源利用率。虚拟内存的实现方式有分段和分页两种,其中分页机制更为常用和灵活。分页机制将虚拟内存划分为固定大小的页,将每个进程的虚拟地址空间映射到物理内存的页