Linux 进程知识总结

news2025/1/19 17:05:50

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Linux操作系统专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Linux 进程知识总结

文章目录

    • 进程基础
      • 进程定义
      • 进程分类
      • 进程状态
      • 进程属性
    • 进程查看
    • 终止进程

在这里插入图片描述

进程基础

  Linux 系统中基本所有的操作都以进程的形式进行,浏览网页、编辑文档、观看视频等,在使用命令进行操作的过程中,Linux内核都以进程的形式对其进行管理。

  Linux 是一个多用户多任务操作系统→Linux 是一个多进程操作系统。

  每个程序启动时都会创建一个或多个进程,与其他程序创建的进程共同运行在Linux的内核空间中。每个进程是一个独立的任务,进程依据操作系统内核制定的规则,轮换着被CPU执行,一般CPU对于进程的执行采用时间片轮换的方法。每个进程运行在自己的空间内,只有通过操作系统内核才能与其进行交互。

  计算机中的多个程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程;而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其他执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入“进程”概念。

  进程,是计算机中已运行程序的实体。进程曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX、Linux2.4及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。 若干进程有可能与同一个程序相关联,且每个进程皆可以同步(循序)异步(平行)的方式独立运行。现代计算机系统可以同一段时间内以进程的形式将多个程序加载到存储器中,并可时间共享(或称时分复用),以在一个处理器上表现出同时(平行性)运行的感觉。同样的,使用多线程技术(多线程即每一个线程都代表一个进程内的一个独立执行上下文)的操作系统或计算机架构,同样程序的平行线程,可在多CPU主机或网络上真正同时运行(在不同的CPU上)。

  在进程的生存期内,将使用许多系统资源。进程使用系统CPU来运行自己的指令,并使用系统的物理内存保存自己的数据。进程打开和使用文件系统的文件,并直接或者间接地使用系统地物理设备。

  Linux必须跟踪进程本身及其所拥有地资源,来保证能够公平地管理所有进程。Linux系统与其他操作系统不同,进程的创建和命令执行是两个不同的概念。虽然一般创建一个新的进程是为了运行一个指定的指令,但是不运行新命令也可以创建进程,不创建新进程也可以运行命令。

进程定义

  狭义定义:进程就是一段程序的执行过程。

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

  使用者下达运行程序的命令后,就会产生进程。同一程序可产生多个进程(一对多关系),以允许同时有多位使用者运行同一程序,却不会相冲突。进程需要一些资源才能完成工作,如CPU使用时间、存储器、文件以及I/O设备,且为依序逐一进行,也就是CPU核心在任何时间内仅能运行一项进程。

进程分类

  进程一般分为交互进程、批处理进程实时进程三类。

  守护进程总是处于活跃状态的,一般是后台运行;守护进程一般是由系统在开机时通过脚本自动激活启动或超级管理用户root来启动。比如在Fedora或Red Hat中,可以定义httpd服务器的启动脚本的运行级别,此文件位于/etc/init.d目录下,文件名是httpd,/etc/init.d/httpd就是服务器的守护程序,当把它的运行级别设置为3和5,系统启动时,它会跟着启动。

  (1)交互式进程:一般是由Shell启动的进程。这些进程经常和用户发生交互,所以花费一些时间等待用户的操作。当有输入时,进程必须很快地激活。通常,要求延时在50~150ms。典型的交互式进程有:控制台命令Shell、文本编辑器、图形应用程序。

  (2)批处理进程(Batch Process):不需要用户交互,一般在后台运行,所以不需要非常快的反应,他们经常被调度期限制。典型的批处理进程:编译器、数据库搜索引擎和科学计算。

  (3)实时进程:对调度有非常严格的要求,这种类型的进程不能被低优先级进程阻止,并且在很短时间内做出反应。典型的实时进程:音视频应用程序、机器人控制等。
  批处理进程可能与I/O或者CPU有关,但是实时进程完全通过Linux的调度算法识别。其实交互式进程和批处理进程很难区别。

进程状态

  Linux是一个多用户、多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。进程状态划分也有不同的分法,但一般分为5个状态,在进程管理过程中始终会处于某种状态,进程的当前状态决定了进程如何和何时获得CPU的访问权限。
  (1) 运行状态(正在运行或在运行队列中等待);
  (2) 中断状态(休眠中或受阻或在等待某个条件的形成或接收到信号);
  (3) 不可中断状态(收到信号不唤醒和不可运行,进程必须等待直到有中断发生);
  (4) 僵死状态(进程已终止,进程描述存在,直到父进程调用wait4()系统,调用后释放);
  (5) 停止状态(进程收到SIGSTOP、SIGSTP、SIGTIN、SIGTOU信号后停止运行)。

  ps工具标识进程的5种状态码:
  (1) D不可中断uninterruptible sleep(usually IO);
  (2) R运行runnable(on run queue);
  (3) S中断sleeping;
  (4) T停止traced or stopped;
  (5) Z僵死a defunct(“zombie”)process。

  Linux除了使用内核本身管理这些进程调度以外,还将这些信息通过**工具程序**传递给用户,并通过工具程序接受用户对某个进程的处理。

进程属性

  • 进程的属性也就是描述进程的信息,包含以下几个部分。
      
     进程ID(PID),是唯一的数值,用来区分进程;
     父进程和父进程的ID(PPID);
     启动进程的用户ID(UID)和所归属的组(GID);
     进程状态,状态分为运行R、休眠S、僵尸Z;
     进程执行的优先级;
     进程所连接的终端名;
     进程资源占用,比如占用资源大小(内存、CPU占用量)。

进程查看

  进程查看命令包括内存状态查看命令free、进程查看命令ps、top以及可以系统内进程查看命令pstree。

1、 查看内存状态

  名称:free
  使用权限:所有使用者
  使用方式:free [-bkmgto] [-s时间]
  说明:显示内存状态信息。free命令显示内存使用情况,包括物理内存、虚拟交换文件内存、共享内存区段,以及系统核心使用的缓冲区。

参数说明
-bfree命令默认单位是kb;-b采用Byte为单位;-k采用KB为单位;-m采用MB为单位;-g采用GB为单位。
-t显示内存的总和行。
-o不显示缓存区调节行。
-s间隔秒数,持续观察内存使用情况。

显示内存使用情况

在这里插入图片描述

说明:
  total: 表示物理内存总量(total=used+free)。
  used: 表示总计分配给缓存(包含buffers与cache)使用的数量,但其中可能部分缓存并未实际使用。
  free: 未被分配的内存。
  shared: 共享内存,一般系统不会用到。
  buffers: 系统分配但未被使用的buffers数量。
  cached: 系统分配但未被使用的cache数量。

以MB显示内存使用情况

在这里插入图片描述

每隔5s查看内存状态一次

在这里插入图片描述

2、 查看进程运行情况

  名称:ps
  使用权限:所有使用者
  使用方式1:ps aux
  使用方式2:ps –lA
  使用方式3:ps axjf
  说明:显示进程信息

参数说明
-A所有的process均显示出来,与-e具有同样的效用。
-a不与terminal有关的所有process。
-u有效使用者(Effective User)相关的process。
x通常与a这个参数一起使用,可列出较完整信息。

  输出格式规划

  l:较长、较详细地将该PID的信息列出。
  j:工作的格式(Jobs Format)。
  -f:做一个更为完整的输出。

查看属于自己的进程的基本情况。

在这里插入图片描述

  说明:PID代表进程ID;TTY代表登录者的终端位置;TIME代表使用掉的CPU时间;CMD代表造成程序触发的进程。

将目前属于你自己这次登入的PID相关信息列出来。

在这里插入图片描述

参数说明
F代表这个进程的标志,说明这个进程的权限,4代表使用者为root。
S代表这个进程的状态(STAT)。
UID进程被该UID所拥有。
PID进程的ID,也就是进程的唯一标识。
PPID此进程的父进程的PID。
CCPU使用的资源的百分比。
PRIPriority(优先执行序)的缩写,代表CPU所执行的优先级,数值越小离执行的时间越短。
NINice值,进程优先级。
ADDRADDR是指Kernel Function,即该程序在内存的哪个部分。
SZ进程占用的内存大小。
WCHAN目前这个程序是否正在运行当中,若为-表示正在运行。
TTY登录者的终端机位置。
TIME该进程占用的CPU时间。
CMD该进程是由哪个命令触发的。

列出目前所有的正在内存当中的程序。

在这里插入图片描述

参数说明
USER这个进程属于哪个用户。
PID该进程的唯一ID。
%CPU进程所使占用的CPU百分比。
%MEM进程所占用的物理内存百分比。
VSZ进程占用的虚拟内存量单位为Kbytes。
RSS进程占用的固定的内存量单位为Kbytes.
TTY该进程是在哪个终端机上面运行,若与终端机无关,则显示“?”;如果显示tty1~tty6代表本机上面的登录者程序;若为pts/0等,则表示为由网络连接进主机的程序。
STAT该程序目前的状态。
START该进程被触发启动的时间。
TIME该进程实际使用CPU运行的时间。
COMMAND该进程的实际命令。

和grep结合,提取指定程序httpd的进程。

在这里插入图片描述

列出类似程序树的程序显示。

在这里插入图片描述

3、 以树状形式查看进程

  名称:pstree
  使用权限:所有使用者
  使用方式:ps [-ahlup]
  说明:以树状形式显示进程的情况。

参数说明
-a显示每个程序完整的命令。
-A各进程之间以ASCII字符连接。
-h显示树状图的时候标明现在执行的程序。
-u同时列出每个进程的所有用户。
-p显示进程PID。

使用默认命令查看进程树。

在这里插入图片描述
在这里插入图片描述

  说明:此处只截取了进程树的一部分。

列出目前系统上的ASCII连接的各种进程树。

在这里插入图片描述
在这里插入图片描述

  说明:和默认参数只是连接形式上有所差别而已。这里也只截取了一部分。

显示当前所有进程的进程ID。

在这里插入图片描述
在这里插入图片描述

  说明:这里也只截取了一部分。

4、 动态查看进程

  名称:top
  使用权限:所有使用者
  使用方式:top [-d秒数] [-n执行次数] [-bnpc]
  说明:ps是查看某个时间点的进程情况,top可以持续检测进程的运行状态。

参数说明
-d后面接秒数,是指整个程序画面多少秒更新一次。
-b以批次的方式执行top。
-n后接执行次数,指定监控信息的更新次数。
-p后接PID监控指定的进程。
-c显示每个进程完成的命令。

每2s执行一次top。

在这里插入图片描述
在这里插入图片描述

  使用图形化界面监管进程。

  使用 gnome-system-monitor 命令或者选择面板上“应用程序”菜单中的“系统工具”→“系统监视器”命令,通过图形化界面的方式监视系统。

在这里插入图片描述

5、 进程前后台切换

  默认情况下,一个命令执行完之后,此指令将独占Shell,如下图所示,并拒绝其他输入,称为前台进程;反之,则称为后台进程。对每一个终端,都允许多个后台进程。对前台、后台进程的控制与调度,被称为任务控制
  command &:将一个进程直接丢入后台执行;
  Ctrl+Z组合键:将一个正在运行的前台进程暂时停止,并丢入后台。

  打开Firefox并将其进程放到后台。

(1) 使用firefox命令直接打开火狐。

在这里插入图片描述
在这里插入图片描述

(2) 按Ctrl+C组合键结束进程。
(3) 使用firefox &命令直接打开火狐。

在这里插入图片描述
在这里插入图片描述

(4) 使用Ctrl+Z组合键,将一个正在运行的前台进程暂时停止,并丢入后台。

在这里插入图片描述
在这里插入图片描述

  说明:可以看到进程已停止。

终止进程

  终止一个进程或终止一个正在运行的程序,一般是通过kill命令进行的。比如一个程序已经死掉,但又不能退出,就可以考虑应用这些工具。

kill命令工作原理:

  向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。

  比如在top命令中,看到系统运行许多进程,有时就需要使用kill命令终止某些进程来提高系统资源。系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其他虚拟控制台工作并关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。

以树状形式查看进程

  名称:kill
  使用权限:所有使用者
  使用方式:kill PID

  说明:终止编号为PID的进程,这个命令一般是要和ps命令一起配合使用的,因为要使用kill命令就必须知道进程的PID。

查看系统内的进程,并终止PID为20532的进程。
在这里插入图片描述

  说明:终止进程,kill后面接上进程号。

查找并终止火狐进程。

在这里插入图片描述

  说明1:ps –ef等同于ps aux,ps –ef | grep firefox用于查找与Firefox相关的进程;这里能查找到多个,是因为开启了多个Firefox上网。

  说明2:kill终止的必须是一个已经存在的PID的号。

查看系统内的httpd服务,并终止这个进程。

在这里插入图片描述

  说明1:上述途中第二列是进程的PID号,21013是httpd服务器的父进程,21016~21023的进程都是21013的子进程;杀掉父进程,其下的子进程也会跟着死掉。只终止子进程,服务不会停止。

  说明2:service httpd status用来查看服务的状态。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

高阶数据结构之哈希的应用

文章目录位图(bitMap)位图的实现将数据添加到位图中检查数据是否在位图中存在将数据的对应位置置为0位图的应用布隆过滤器为什么会有误差布隆过滤器的实现布隆过滤器的删除使用Google下的guava组件操作布隆过滤器布隆过滤器的缺陷布隆过滤器的使用场景海…

分享69个ASP源码,总有一款适合您

分享69个ASP源码,总有一款适合您 69个ASP源码下载链接:https://pan.baidu.com/s/1XXwBL0Y0nOSel9xJVqz0Ow?pwdertw 提取码:ertw Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj base_url "https://d…

关于JavaScript编译原理以及作用域的深入探讨

前言 几乎所有编程语言最基本的功能之一,就是能够储存变量当中的值,并且能在之后对这个值进行访问或修改。事实上,正是这种储存和访问变量的值的能力将状态带给了程序。 若没有了状态这个概念,程序虽然也能够执行一些简单的任务…

高码率QPSK调制解调方案(2.1 QPSK调制)

2 全数字高码率QPSK调制解调软件设计 2.1 QPSK调制 2.1.1 QPSK调制原理 QPSK调制即正交相移键控信号,其信号表达式为 (1) 其中,和分别表示每比特的能量和持续

​LabView​动态改变显示文本框的属性(颜色、字体)

目录 问题: 解决方式 1、在程序框图面板上,选择显示文本框,右键创建属性节点 2、选择属性节点为数值文本,依据需要改变的类型选择文本颜色或字体 3、依据下位机上传的数值大小,选择-条件结构类型,依据…

03俯瞰全局:gRPC是如何进行通信的

gRPC作为Web网站和APP后端的最常用服务提供方式之一和分布式微服务架构不同节点间的最常见通信方式之一,它自身是如何进行通信的呢,这个问题就是我们本篇文章将要研究的重点,先从全局的角度分析gRPC服务端和客户端进行通信的主要流程,再从细节剖析gRPC是如何进行高效的远程…

Qt QVector “isDetached()“

文章目录摘要尝试通过加锁解决lock&unlockQMutexLockertry_lock改变量属性Q_ASSERT参考关键字: ASSERT、 isDetached、 崩溃、 QVector、 Detach摘要 今天在公司填坑的时候,有随机获得了一个新的BUG,就是一直报ASSERT:”isD…

剑指 Offer 35. 复杂链表的复制

题目 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 思路 方法一:哈希表 利用哈希表的查询特点&#xff…

【Linux】项目自动化构建工具-make/Makefile与Linux调试器-gdb使用

文章目录Linux项目自动化构建工具-make/MakefileLinux调试器-gdb使用Linux项目自动化构建工具-make/Makefile 背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录…

SpringBoot+Vue图书馆管理系统

简介:本项目采用了基本的SpringBootVue设计的图书馆管理系统。详情请看截图。经测试,本项目正常运行。本项目适用于Java毕业设计、课程设计学习参考等用途。 项目描述 项目名称SpringBootVue图书馆管理系统源码作者LHL项目类型Java EE项目 (…

【iMessage苹果推推送】将看到一个可扩大选项“AppleDevelopmentPushServices”6.扩展此选项并右键单击“Appledge”>

推荐内容IMESSGAE相关 作者✈️IMEAX推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容3.日历推 *** …

基于NOSTR协议的“公有制”版本的Twitter,去中心化社交软件Damus用后感,一个极端走向另一个极端

最近,一个幽灵,Web3的幽灵,在网络游荡,它叫Damus,这玩意诠释了什么叫做病毒式营销,滑稽的是,一个Web3产品却在Web2的产品链上疯狂传销,各方大佬纷纷为其背书,到底发生了什…

基于python实现疫情期间微博、B站网民情绪分析

一项目概述:“疫情下的社会心理学”这一课题旨在通过疫情期间大众在自媒体上的新闻评论等信息,凭借一些方法分析出总体的心理变化和情绪走向,并在宏观上把握了总体的心态格局。对于该课题,我们小组首先爬取了哔哩哔哩和微博的大量…

Spring Boot(三):第二种导入依赖方式的实战案例(常用)

文章目录 第二种导入依赖方式的实战案例 一、导入依赖方式1(拓展方法) 二、使用idea自带springBoot项目初始化插件 第二种导入依赖方式的实战案例 一、导入依赖方式1(拓展方法) 在公司中可能会出现必须继承某个项目&#xff…

Linux日志分析工具之AWStats

Linux日志分析工具之AWStats 📒博客主页: 微笑的段嘉许博客主页 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由微笑的段嘉许原创! 📆CSDN首发时间:🌴2…

力扣sql简单篇练习(十)

力扣sql简单篇练习(十) 1 过去30天的用户活动 || 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 多少天内使用Date_SUB函数,具体用法是Date_SUB(初始日期,interval 变更的天数 day) ,正数找过去负数找未来 # 变更天数多少…

接口测试、接口协议以及常用接口测试工具介绍

目录 一、前言:什么是接口 二、接口协议以及对应的接口测试工具 三、接口测试如何设计测试用例? 四、接口组成? 五、总结 一、前言:什么是接口 1.接口指的是软件提供给外界的一种服务。作用在于使其内部的数据能被外部进行修…

买的香港云服务器怎么用?云服务器使用教程

香港云服务器的优势及好处,使得很多人都愿意使用和推荐,推荐的人多了自然购买的人就多了,其中不乏很大部分新手,购买之后却不知道该怎么使用和管理登录等操作。下面我们聊聊香港云服务器怎么登录使用。 香港云服务器登录管理方法&…

论文浅尝 | 基于无监督标注的漏洞描述文本概念抽取

笔记整理:韩林峄,天津大学博士论文发表期刊:Transactions on Software Engineering and Methodology (TOSEM)动机软件漏洞对推进漏洞分析和安全研究具有巨大的潜力,人们往往使用自然语言来描述软件漏洞的关键特征,并在…

JAVA打印数字二进制编码逻辑说明

在我们学习算法的过程中,我们首先必须要知道的就是数据(尤其是数字)类型在底层保存的方式。因为这样才能使我们的算法变的更加高效。 在JAVA中我们常用的数字类型是int类型,有过基础的同学应该知道int数据类型的长度为32bit。但实际使用时需要注意只有3…