首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux进程管理(一)进程数据结构

Linux内核中使用 task_struct 结构来表示一个进程,这个结构体保存了进程的所有信息,所以它非常庞大,在讲解Linux内核的进程管理,我们有必要先分析这个 task_struct 中的各项成员...task_struct *group_leader; pid:每个进程都有自己的 pid,它在内核中是唯一的,在Linux中,我们可以使用 ps -ef查看所有的进程,其中 PID 就是进程号。...,所以不管进程是在内核态运行还是在用户态运行都需要用到栈 Linux进程地址空间分为内核空间和用户空间,它们之间是不能直接访问的,而一个进程某些时候可能在用户态运行,某些时候可能在内核态运行(发生系统调用时...12位置零就可以得到内核栈的基址 而 thread_info 存在于内核栈的栈底处,所以也就获取到了该进程对应的 thread_info 结构: thread_info 结构中有一个 task_struct...* 成员,指向该进程的 task_struct,所以也就可以获得该进程的 task_struct 结构 不禁感叹,Linux内核的实现真是巧妙啊!

1.2K10

Linux进程——Linux进程进程优先级

如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...综上所述:当一个进程退出了,但是退出信息还没被父进程读取,此时这个退出进程的PCB结构不被释放,此时这个退出进程就处于僵尸状态(Z) 1.3 观察僵尸状态 让我们来直观看了解一下僵尸状态 1 #include...,因为数据结构对象本身就要占用内存,是要在内存的某个位置进行开辟空间 内存泄漏 关于如何避免僵尸进程带来的危害我们后面细说 2....NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!

9010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LinuxLinux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...fork代码后,内核做: 分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回,开始调度器调度 当一个进程调用fork之后,就有两个二进制代码相同的进程.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....每个函数都有他的局部变量,不同的函数通过call/return系统进行通信 这种通过参数和返回值在拥有私有数据的函数间通信的模式是结构化程序设计的基础。...Linux鼓励将这种应用于程序之内的模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用的程序执行一定的操作,然后通过exit(n)来返回值。

    13710

    Linux进程控制——Linux进程等待

    前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...进程等待的概念: 我们通常说的进程等待其实是通过wait/waitpid的方式,让父进程(一般)对子进程进行资源回收的等待过程,父进程必须等待这个子进程结束后,处理它的代码和数据! 2....进程等待必要性 在了解完进程等待的概念后,新的问题出现了,我们为什么要进行进程等待,进程等待的必要性是什么?...进程等待必要性: 若子进程退出,而父进程对它不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。...父进程创建子进程的目的是为了让子进程协助自己完成任务的,而父进程需要知道子进程将任务完成得如何。这就需要通过进程等待的方式,获取子进程的退出信息。 3.

    9110

    Linux进程控制——Linux进程终止

    前言:前面了解完前面的Linux进程基础概念后,我们算是解决了Linux进程中的一大麻烦,现在我们准备更深入的了解Linux进程——Linux进程控制!...我们主要介绍的Linux进程控制内容包括:进程终止,进程等待与替换,进程程序替换! 本篇主要内容: 重识进程创建 进程退出场景 错误码和退出码 1....重识进程创建 1.1 fork函数 在我们之前提到过,创建进程使用的是fork函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...内核做: 分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回,开始调度器调度 fork函数返回值: 子进程返回0, 父进程返回的是子进程的...在多进程环境中,我们创建子进程的目的就是协助父进程办事,但是父进程怎么知道子进程把事情办得怎么样?所以父进程要知道子进程办的怎么样,就有了退出码,而main函数的返回值,就是进程的退出码!

    9510

    linux通过进程名杀死进程_linux关闭进程命令

    笔记:根据一个进程的名字或启动此进程的命令(连续的一部分即可)杀死进程 一、使用单条命令 ps -ef | grep 进程名/启动进程的命令 | grep -v grep | awk ‘{print $2...}’ | xargs kill -9 执行结果: [1]-  已杀死               sleep 200 [2]+  已杀死               sleep 200 二、编写脚本 linux.../bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9     # 1通过ps查询进程的id     # 2使用kill -9 强制终止进程...函数功能:根据进程名杀死程序     参数:进程名     返回值:无 !...————————————————————— # 根据进程名查询包含进程名的进程 并排除grep查询进程和此脚本进程 ps -ef | grep “$pName” | grep -v grep | grep

    16K20

    LinuxLinux进程控制——进程创建、进程终止及进程等待详解

    进程创建 fork函数初识 在Linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...#include pid_t fork(void); 返回值:自进程中返回0,父进程返回子进程id,出错返回-1 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给子进程...将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回,开始调度器调度 当一个进程调用 fork 之后,就有两个二进制代码相同的进程。...linux]# ....⭐进程等待 进程等待的必要性 在Linux进程提到过,子进程退出,父进程如果不管不顾,不读取子进程的退出信息,就可能造成“僵尸进程”的问题,进而造成内存泄漏。

    9510

    Linux进程

    Linux进程是系统中正在运行的程序的实例。每个进程都有一个唯一的进程标识符(PID),并且拥有自己的地址空间、内存、数据栈以及其他用于跟踪执行状态的属性。...进程可以创建其他进程,被创建的进程称为子进程,创建它们的进程称为父进程。这种关系形成了一个进程树。 1. 进程的类型 在Linux操作系统中,进程是系统进行资源分配和调度的基本单位。...Linux进程可以根据其特性和用途被分为多种类型。以下是一些主要的Linux进程类型: 1....进程间通信(IPC) 进程间通信(IPC)是指两个或多个进程之间传输数据或信号的机制。Linux支持多种IPC机制,包括: 1....进程控制 Linux提供了一系列的系统调用(如fork(), exec(), wait(), exit()等)用于进程控制。

    5710

    Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)【转】

    Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在include/linux/sched.h文件中。...谈到task_struct结构体,可以说她是linux内核源码中最复杂的一个结构体了,成员之多,占用内存之大。 进程状态 /* * Task state bitmask. NOTE!...进程内核栈 void *stack; 内核栈与线程描述符 对每个进程Linux内核都把两个不同的数据结构紧凑的存放在一个单独为进程分配的内存区域中; 一个是内核态的进程堆栈 另一个是紧挨着进程描述符的小数据结构...内核栈数据结构描述thread_info和thread_union thread_info是体系结构相关的,结构的定义在thread_info.h中 Linux内核中使用一个联合体来表示一个进程的线程描述符和内核栈...进程最常用的是进程描述符结构task_struct而不是thread_info结构的地址。

    2.3K20

    Linux进程学习【进程状态】

    本文将会带着大家认识的各种 进程 状态 ---- 正文 在谈 进程状态 之前,首先要回顾下之前的 进程 相关知识 OS管理的本质是先描述,再组织 OS并非直接管理 进程 ,而是管理 进程 的 PCB(...进程 为 阻塞 状态 总结 进程阻塞就是不被调度 原因 进程的 task_struct 结构体需要在某种被 OS 管理的资源下排队 挂起 理解 进程阻塞 后,理解 进程挂起 就比较轻松了 挂起(...,即把手机揣进兜里,然后 专心执行走路这个 进程 进程状态 进程 有各种运行状态,方便OS进行管理,在 Windows 中,进程 状态是这样的 而在我们 Linux 中,新建、就绪、运行都可以看作...运行 R 这一个状态,所以比较清晰 而我们今天要学习的正是 Linux 中的 进程 状态 进程是何种状态,取决于此进程的PCB在哪里排队 ️运行 R 首先来看看第一种状态 R 以我们以往的认知来说...父进程,此时 子进程 会被OS领养 子进程 的 父进程 变为 1号进程进程 就变成了一个 孤儿进程 发出指令终止 父进程 假设 子进程 不被 1号进程 领养 子进程 退出时就会无人回收

    21730

    Linux进程——进程地址空间

    前言:在讲完环境变量后,相信大家对Linux有更进一步的认识,而Linux进程概念到这也快接近尾声了,现在我们了解Linux进程中的地址空间!...首先引入一个概念:每一个进程运行之后,都会有一个进程地址空间的存在,在系统层面都要有自己的页表映射结构! 因此:当一个进程先修改后,它就不再指向原来那块物理空间,而是拥有一个新的物理空间!...每一个进程都要有地址空间,系统中,一定要对地址空间做管理!! 而操作系统管理地址空间,一定是“先描述,在组织”!地址空间最终一定是一个内核的数据结构对象, 就是一个内核结构体!...如果我们还想继续划分就会有多个struct vm_area_struct的结构,然后他们会构成一个线性划分的链表结构。...结束进程地址空间,我们的Linux进程概念到这里也结束了,后面我将带大家走进进程控制。 谢谢大家支持本篇到这里就结束了

    18110

    Linux进程学习【进程地址】

    (真实地址空间只有一份),此时情况是这样的: ️代码实现 在实现虚拟地址空间时,是用结构体 mm_struct 实现的 同 task_struct 一样,mm_struct 中也包含了很多成员,比如不同区域的边界值...因为每个进程都有属于自己的空间,OS 在管理进程时,能够以统一的视角进行管理,效率很高 光有 虚拟地址空间 是不够的,还需要一套完整的 ‘‘翻译’’ 机制进行程序寻址,如 Linux 中的 页表 +...后续对这块进行写入操作时,会直接拒绝 对于这种机制感兴趣的同学可以点击下面这几篇文章查看详细内容: Linux的虚拟内存详解(MMU、页表结构) ARM体系架构——MMU 逻辑地址、页表、MMU等...️写时拷贝 Linux 中存在一个很有意思的机制:写时拷贝 这是一种 赌bo 行为,OS 此时就赌你不会对数据进行修改,这样就可以 使多个 进程 在访问同一个数据时,指向同一块空间,当发生改写行为时...(权限设置) 将 进程管理 和 内存管理 进行 解耦,方便 OS 进行更高效的管理 可以让进程以统一的视角看待自己的代码和数据 ---- 总结 以上就是本篇关于 Linux进程学习【进程地址】的全部内容了

    17320

    Linux进程控制——Linux进程程序替换

    前言:Linux进程控制包含了进程终止,进程等待,进程程序替换。走到现在我们也只剩下进程程序替换没介绍了,那么让我们来看看进程程序替换到底是什么!...本篇主要内容: 替换原理 替换函数 实现简易shell 我们所创建的所有的子进程,执行的代码,都是父进程代码的一部分,如果我们想让子进程执行新的程序,执行全新的代码和访问全新的数据,不在和父进程有瓜葛这就要用到我们的进程替换了...当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。.../usr/bin/bash echo "hello Linux" echo "hello world" touch code // test.c int main() { printf("pid...总结 进程程序替换能够让我们只用C语言就可以调用其他任何语言去执行,极大程度上带来了便利,也可以帮助我们完成很多任务,好了,关于Linux进程控制我们先了解到这,下次我们将进入新的章节!

    9010

    Linux进程——Linux下常见的进程状态

    前言:在进程学习这一块,我们主要学习的就是PCB这个进程控制块,而PBC就是用来描述进程结构体,而进程状态就是PCB结构体中的一个变量。...本篇主要内容: 操作系统中的进程状态 Linux下的进程状态 在开始之前,我们先来简单了解以下进程状态 进程的本质就是PCB中的一个变量!!! 所谓状态变化,本质就是修改整形变量!!!...在操作系统中,有管理设备的结构体 将一个进程从运行队列移动至的等待队列中,再将状态改为阻塞那么这个进程就处于阻塞状态,这个过程就是状态变化!...此时,恰好系统内的内存资源已经严重不足了,系统压力太大,Linux在是在没办法时候,会通过杀掉进程,节省资源的,来不及进程反应直接被系统 “干掉” 。...总结 在了解Linux进程的分类时,我们通常是先了解操作系统的进程,因为二者有一定的联系,了解操作系统能更好理解进程在操作系统中的运行关系。进程状态在进程中也极为重要,希望大家能理解透彻!

    12310

    图解PostgreSQL进程结构和内存结构

    阶段三: 阶段二通过之后,主服务进程为该客户端单独fork一个客户端工作进程Postgres。 SP进程:会话进程。用户一旦验证成功就会fork一个新的进程。...阶段四: 客户端与Postgres进程建立通信连接,由Postgres进程负责后续所有的客户端请求操作,直至客户端退出后,该Postgres进程消失。...二.更新语句的流程 BgWriter(后台写)进程 WaLWriter(预写式日志)进程 AutoVAcuum(系统自动清理) SysLogger(系统日志)进程 PgArch(归档)进程...,并且后续会有BgWriter(图中BGW进程进程将数据刷脏到磁盘中。...数据刷脏前,日志会先落盘,log buffer会被进程WaLWriter(预写式日志)进程刷新到磁盘。

    1.2K10

    Linux进程——Linux进程的概念(PCB的理解)

    前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。...Linux进程学习基础 本篇主要内容: 进程的概念 通过系统调用获取进程标示符 1....而这个又操作系统产生控制进程结构就是PCB PCB: 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。...因此: 进程=可执行程序 + 内核数据结构(PCB) 2....:ps ajx | head -1 && ps ajx | grep 可执行程序 2.2 终止进程 在我们刚接触Linux时,通常按CTRL+c可以结束进程,现在在学习Linux进程时,还有一种方法可以杀死进程

    12210

    Linux进程调度_linux进程的查看和调度

    对于处理器消耗型的进程,调度策略往往是降低他们的执行频率,延长运行时间。 Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...一、普通进程Linux 中普通进程依赖称之为 nice 值 的东东来进行进程的优先级描述。nice 值的范围是 [-20, 19]。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...[ 分配给进程的运行时间 = 调度周期 *(进程权重 / 所有进程权重之和) ] CFS 调度器实体结构作为一个名为 se 的 sched_entity 结构,嵌入到进程描述符 struct task_struct...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。

    20.6K10
    领券