- 1、waitpid方法#include<sys/types.h>#include<sys/wait.h>pid_t waitpid(pid_t pid, int* status, int options);返回值: 当正常返回时,waitpid返回收集到的子进程的进程ID; 如果设置了选项WNOHANG,而调用waitpid时,发现没有已退出的子进程可收集,则返回0; 如果调用中出错,则返... 1、waitpid方法#include<sys/types.h>#include<sys/wait.h>pid_t waitpid(pid_t pid, int* status, int options);返回值: 当正常返回时,waitpid返回收集到的子进程的进程ID; 如果设置了选项WNOHANG,而调用waitpid时,发现没有已退出的子进程可收集,则返回0; 如果调用中出错,则返...
- 💦 进程等待的必要性之前讲过,子进程退出,父进程如果不管不顾,就可能造成 “ 僵尸进程 ” 的问题,进而造成内存泄漏。另外,进程一旦变成僵尸状态,那就刀枪不入,“ 杀人不眨眼 ” 的kill -9也无能为力,因为谁也没有办法杀死一个已经死去的进程。 最后,父进程派给子进程的任务完成的如何,我们需要知道。如,子进程运行完成,结果对还是不对,或者是否正常退出。父进程通过进程等待的方式,回收子... 💦 进程等待的必要性之前讲过,子进程退出,父进程如果不管不顾,就可能造成 “ 僵尸进程 ” 的问题,进而造成内存泄漏。另外,进程一旦变成僵尸状态,那就刀枪不入,“ 杀人不眨眼 ” 的kill -9也无能为力,因为谁也没有办法杀死一个已经死去的进程。 最后,父进程派给子进程的任务完成的如何,我们需要知道。如,子进程运行完成,结果对还是不对,或者是否正常退出。父进程通过进程等待的方式,回收子...
- 为什么 main 函数中,总是 return 0,return 其它值可以吗 ❓ 对于 main 函数的返回值,我们称之为进程退出码,它代表进程退出后,结果是否正确,通常进程退出码为 0 代表成功,!0 代表其它含义,如果你愿意你也可以 return 其它值。大部分情况下,main 函数跑完后,默认结果是正确的,所以以前返回的都是 0。main 函数 return 的值给谁看 ??? 其... 为什么 main 函数中,总是 return 0,return 其它值可以吗 ❓ 对于 main 函数的返回值,我们称之为进程退出码,它代表进程退出后,结果是否正确,通常进程退出码为 0 代表成功,!0 代表其它含义,如果你愿意你也可以 return 其它值。大部分情况下,main 函数跑完后,默认结果是正确的,所以以前返回的都是 0。main 函数 return 的值给谁看 ??? 其...
- 本文主要学习理解 fork 的返回值、写时拷贝的工作细节、为什么要存在写时拷贝;进程退出码、进程退出的场景及常见的退出方法、对比 man 2 _exit 和 man 3 exit;进程终止、操作系统怎么进行释放资源、池的概念;进程等待的价值、进程等待的方法 wait 和 waitpid(常用)、int* status、阻塞和非阻塞、如何理解等待、WIFEXITED、WEXITSTATUS、W... 本文主要学习理解 fork 的返回值、写时拷贝的工作细节、为什么要存在写时拷贝;进程退出码、进程退出的场景及常见的退出方法、对比 man 2 _exit 和 man 3 exit;进程终止、操作系统怎么进行释放资源、池的概念;进程等待的价值、进程等待的方法 wait 和 waitpid(常用)、int* status、阻塞和非阻塞、如何理解等待、WIFEXITED、WEXITSTATUS、W...
- 一、Linux2.6内核进程调度队列 —— 了解不是本文的重点,所以了解一下即可。 💦 Linux2.6内核中进程队列的数据结构 💦 一个CPU拥有一个runqueue如果有多个 CPU 就要考虑进程个数的负载均衡问题。 💦 优先级普通优先级:100~139 (我们都是普通的优先级,想想 nice 值的取值范围,可与之对应 !)。实时优先级:0~99 (不关心) 💦 活动队列时间片... 一、Linux2.6内核进程调度队列 —— 了解不是本文的重点,所以了解一下即可。 💦 Linux2.6内核中进程队列的数据结构 💦 一个CPU拥有一个runqueue如果有多个 CPU 就要考虑进程个数的负载均衡问题。 💦 优先级普通优先级:100~139 (我们都是普通的优先级,想想 nice 值的取值范围,可与之对应 !)。实时优先级:0~99 (不关心) 💦 活动队列时间片...
- 💦 进程地址空间如何映射至物理内存 (页表的引出)假设存在三个进程 A B C,操作系统就会给每一个进程画一张大饼,叫做当前进程的虚拟地址空间,其中会通过指针将进程和虚拟地址空间关联起来。运行进程A,就要把进程A加载到物理内存中,其中操作系统会给每一个进程创建一张独立的页表结构,我们称之为用户级页表,当然后面还有内核级页表,而页表构建的就是从地址空间中出来的虚拟地址到物理地址中的映射,每... 💦 进程地址空间如何映射至物理内存 (页表的引出)假设存在三个进程 A B C,操作系统就会给每一个进程画一张大饼,叫做当前进程的虚拟地址空间,其中会通过指针将进程和虚拟地址空间关联起来。运行进程A,就要把进程A加载到物理内存中,其中操作系统会给每一个进程创建一张独立的页表结构,我们称之为用户级页表,当然后面还有内核级页表,而页表构建的就是从地址空间中出来的虚拟地址到物理地址中的映射,每...
- 一、 什么是进程地址空间 💦 观察父子进程在5秒后,全局变量g_val的值和地址#include<stdio.h> #include<unistd.h> #include<sys/types.h> int g_val = 0; int main() { printf("begin......%d\n", g_val); ... 一、 什么是进程地址空间 💦 观察父子进程在5秒后,全局变量g_val的值和地址#include<stdio.h> #include<unistd.h> #include<sys/types.h> int g_val = 0; int main() { printf("begin......%d\n", g_val); ...
- 本文中会介绍很多结构化的知识,我们会通过很多例子里的角色和场景来对一个概念进行定位和阐述,让大家有一个宏观的认识,之后再循序渐进的填充细节,如果你一上来就玩页表怎么映射,那么你可能连页表存在的价值是什么都不知道,最后也只是竹篮打水。 一、回顾与纠正C/C++ 内存布局这个概念比较重要,之前我们也涉及过 —— 我们在语言上定义的各种变量等在内存中的分布情况,如果没有听说过,那么你的 C/C++... 本文中会介绍很多结构化的知识,我们会通过很多例子里的角色和场景来对一个概念进行定位和阐述,让大家有一个宏观的认识,之后再循序渐进的填充细节,如果你一上来就玩页表怎么映射,那么你可能连页表存在的价值是什么都不知道,最后也只是竹篮打水。 一、回顾与纠正C/C++ 内存布局这个概念比较重要,之前我们也涉及过 —— 我们在语言上定义的各种变量等在内存中的分布情况,如果没有听说过,那么你的 C/C++...
- 💦、补充说明 1、 S and S+ 一般在命令行上,如果是一个前台进程,那么它运行时状态后会跟 +。也就是说前台进程一旦执行,bash 就无法进行命令行解释,ls、top 等命令都无法执行,只有 Ctrl + C 来进行终止:如果想把一个进程放在后台可以 ./mytest & :其中对于后台进程,bash 可以对命令行解释:但是你会发现 Ctrl + C 无法终止后台进程,只能对该进... 💦、补充说明 1、 S and S+ 一般在命令行上,如果是一个前台进程,那么它运行时状态后会跟 +。也就是说前台进程一旦执行,bash 就无法进行命令行解释,ls、top 等命令都无法执行,只有 Ctrl + C 来进行终止:如果想把一个进程放在后台可以 ./mytest & :其中对于后台进程,bash 可以对命令行解释:但是你会发现 Ctrl + C 无法终止后台进程,只能对该进...
- 💦 进程状态 1、Linux 2.6内核源码后期我们主要也是以 Linux 2.6 为主来学习,因为它匹配的书籍较多。其中 task_state_array[] 里描述的是 Linux 的进程状态: 2、R (running)进程是 R 状态,一定在 CPU 上运行 ❓ 进程在运行队列中,就叫做 R 状态,也就是说进程想被 CPU 运行,前提条件是你必须处于 R 状态,R :我准备好了... 💦 进程状态 1、Linux 2.6内核源码后期我们主要也是以 Linux 2.6 为主来学习,因为它匹配的书籍较多。其中 task_state_array[] 里描述的是 Linux 的进程状态: 2、R (running)进程是 R 状态,一定在 CPU 上运行 ❓ 进程在运行队列中,就叫做 R 状态,也就是说进程想被 CPU 运行,前提条件是你必须处于 R 状态,R :我准备好了...
- 上面我们写了一个死循环代码,然后 “ ./ ” 运行,一般我们称之为命令式创建进程,实际上我们也可以用代码来创建子进程。fork 也是系统调用接口,对于 fork 我们还会在 “ 进程控制 ” 章节中再深入,在此文中我们会通过 a) 程序员角度。 b) 内核角度。来学习 fork。 💦 认识 fork通过命令 man fork 来查找 fork 的相关手册: 💦 使用 fork 创建进程... 上面我们写了一个死循环代码,然后 “ ./ ” 运行,一般我们称之为命令式创建进程,实际上我们也可以用代码来创建子进程。fork 也是系统调用接口,对于 fork 我们还会在 “ 进程控制 ” 章节中再深入,在此文中我们会通过 a) 程序员角度。 b) 内核角度。来学习 fork。 💦 认识 fork通过命令 man fork 来查找 fork 的相关手册: 💦 使用 fork 创建进程...
- 一、进程 (process) 💦 概念课本概念:进程就是一个运行起来的程序。内核观点:进程就是担当分配系统资源 (CPU 时间、内存) 的实体。当然对于进程的理解不能这么肤浅,我们接着来了解一下 PCB。 💦 描述进程 - PCB进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为 PCB (process control block),Linux 操作... 一、进程 (process) 💦 概念课本概念:进程就是一个运行起来的程序。内核观点:进程就是担当分配系统资源 (CPU 时间、内存) 的实体。当然对于进程的理解不能这么肤浅,我们接着来了解一下 PCB。 💦 描述进程 - PCB进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为 PCB (process control block),Linux 操作...
- 从此篇开始,就开始学习 Linux 系统部分 —— 进程,在正式学习 Linux 进程之前,我们需要铺垫一些概念,如冯诺依曼体系结构、操作系统的概念及定位、进程概念,我们会先铺垫理论,再验证理论。其次对于某些需要深入的概念我们只是先了解下。本文中的 fork 只会介绍基本使用,以及解答 fork 为啥会有 2 个返回值、为啥给子进程返回 0,而父进程返回子进程的 pid;而对于用于接收 fo... 从此篇开始,就开始学习 Linux 系统部分 —— 进程,在正式学习 Linux 进程之前,我们需要铺垫一些概念,如冯诺依曼体系结构、操作系统的概念及定位、进程概念,我们会先铺垫理论,再验证理论。其次对于某些需要深入的概念我们只是先了解下。本文中的 fork 只会介绍基本使用,以及解答 fork 为啥会有 2 个返回值、为啥给子进程返回 0,而父进程返回子进程的 pid;而对于用于接收 fo...
- 注意环境变量的全局属性和语言上的全局属性不一样,比如说你定义了一个全局变量,这个全局变量就可以被当前文件中所有函数访问,而环境变量的全局属性指的是它可以被子进程继承下去。这里我们学习两个获取环境变量的函数 —— getenv(主文主要学习)、setenv。其中使用getenv需要包含<stdlib.h> ,它的参数是环境变量的名称,返回值是该变量对应的内容。在命令行上运行的 “ 大部分 ” ... 注意环境变量的全局属性和语言上的全局属性不一样,比如说你定义了一个全局变量,这个全局变量就可以被当前文件中所有函数访问,而环境变量的全局属性指的是它可以被子进程继承下去。这里我们学习两个获取环境变量的函数 —— getenv(主文主要学习)、setenv。其中使用getenv需要包含<stdlib.h> ,它的参数是环境变量的名称,返回值是该变量对应的内容。在命令行上运行的 “ 大部分 ” ...
- 面试官:说一下线程池的状态以及线程池中空闲的线程的状态 面试官:说一下线程池的状态以及线程池中空闲的线程的状态
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签