首页 > 系统相关 >【Linux】进程_8

【Linux】进程_8

时间:2024-06-17 22:32:52浏览次数:26  
标签:exec 程序 阻塞 Linux 进程 等待 替换

文章目录


五、进程

10. 进程等待

上一篇我们知道了 wait 和 waitpid 函数都有一个 status 参数,这个参数是什么呢?这个参数其实就是进程的返回结果,当子进程结束的时候,就会返回这个值给父进程。
在这里插入图片描述
由上图可知status由三部分组成,其中高16字节不使用,低16字节中的高8字节存储着退出码的信息,低16字节中的第7位字节存储着退出信号的信息。退出信号非0代表程序异常退出,退出码非0代表程序的运行结果不正确。

阻塞等待和非阻塞等待

在这里插入图片描述
形参参入 0 是阻塞等待,传入 WNOHANG 是非阻塞等待。阻塞等待就是当父进程没有收到子进程的返回结果时,会在此阻塞,非阻塞等待就是父进程没有收到子进程的返回结果时,仍可以执行其他代码,并不会将父进程阻塞至此。但是需要 轮询操作 来检查子进程是否已经执行完毕。
选择使用阻塞等待还是非阻塞等待取决于具体的应用场景和需求。有些情况下需要保证操作的正确性和顺序性,适合使用阻塞等待;而有些情况下需要提高程序的效率,适合使用非阻塞等待。

11. 进程程序替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支), 子进程往往要调用一种exec函数以执行另一个程序当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。
在这里插入图片描述
有六种以exec开头的函数,统称exec函数:
在这里插入图片描述
我们来写一个程序替换的程序。
在这里插入图片描述
在这里插入图片描述
程序替换一旦成功,exec之后的代码就不再执行。 exec函数只有失败后才会有返回值,成功了没有返回值。替换完成后不会创建新的程序。我们知道,创建一个进程时,先创建的是 PCB,地址空间,页表等,然后再将程序加载到内存,将程序加载到内存与程序替换的本质是一样的。
由于进程具有独立性,子进程替换的时候会发生写实拷贝,所以不影响父进程的代码,父进程同样可以等待子进程的返回结果。
在这里插入图片描述

这些函数原型看起来很容易混,但只要掌握了规律就很好记。
l(list) : 表示参数采用列表
v(vector) : 参数用数组
p(path) : 有p自动搜索环境变量PATH
e(env) : 表示自己维护环境变量

进程程序替换,不会替换环境变量数据。

上面的6个函数都是 execve 函数的封装。
在这里插入图片描述


未完待续

标签:exec,程序,阻塞,Linux,进程,等待,替换
From: https://blog.csdn.net/m0_69828905/article/details/139753950

相关文章

  • 嵌入式 Linux 基础:环境配置(Debian 12 安装配置)
    目录一、安装虚拟机1、安装VMwareWorkstationPro注册博通官网注册账号下载VMwareWorkstationPro2、虚拟机安装Debian12下载Debian12镜像虚拟机设置配置(安装)debian12配置debian12环境3、配置Debian12软件设置Flatpak和Flathub安装微信二、其他开发环境配置一、安......
  • Linux安装JDK环境
     1.下载安装官网地址:https://www.oracle.com/java/technologies/downloads/?er=221886#java11本地包下载后传入路径/usr/local/下。 不使用xftp也可以直接拖入。如果无法拖入需要安装上传下载文件包:#安装上传下载文件包yuminstalllrzsz-y解压......
  • 【Linux 12】进程控制
    文章目录......
  • 史上最全最详细的适合新手的从零搭建一个Linux的HTTP服务器
    一.概念梳理    http(hyper-text-transmission-protocol)超文本传输协议,顾名思义就是传输超文本(html)的协议,具体地来说,我们不需要知道html怎么写,我们只需要梳理服务器的数据接收和响应.具体业务具体分析,你们可以自行丰富内容,这里只做最简单的功能演示.http协......
  • Linux – menuconfig讲解
    menuconfig1.简介        menuconfig是一套图像化配置工具,由ncurses库提供软件支持。ncurses库提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面。        menuconfig本身的软件只负责提供menuconfig工作的这一套逻辑,比如说通过上下左右调整......
  • ARM Linux 设备树详细介绍(2)共二篇
    承接上文,第一篇        3.Device&Tree引发的BSP和驱动变更        有了DeviceTree后,大量的板级信息都不再需要,譬如过去经常在arch/arm/plat-xxx和arch/arm/mach-xxx实施的如下事情:        1.注册platform_device,绑定resource,即内存、......
  • ssh-key-deploy:一个在Windows上创建ssh密钥并且自动部署到Linux服务器上的小工具
    ssh-key-deploy简介使用Python编写的一个在Windows上创建ssh密钥并且自动部署到Linux服务器上的小工具。功能特点创建具有自定义名称和可选密码的SSH密钥。列出本地存储的所有SSH密钥。将SSH密钥安全地上传到远程服务器。使用直观的命令行界面进行操作,支持菜单导航。友好......
  • OpenCloudOS 支持 Linux 原生版微信,开启生态新篇章
    如今,微信已成为办公领域、日常生活以及娱乐方面的刚性需求软件。作为一款通用开源操作系统,OpenCloudOS积极地与微信展开Linux平台的适配工作,全方位地满足广大用户的需求。近期,经过数月的开发与测试,OpenCloudOS社区与微信团队实现了OpenCloudOS与Linux原生版微信的适配支......
  • linux在文件夹中查找文件内容
    linux在文件夹中查找文件内容在Linux中,可以通过以下多个途径,在文件夹中查找文件内容:1、使用grep命令:grep-r"要查找的内容"/path/to/folder-r参数表示递归地在文件夹及其子文件夹中搜索。/path/to/folder是要搜索的文件夹路径。2、使用ack命令ack"要查找的内容......
  • linux清除history
    linux清除history要清除Linux系统中的历史记录(history),可以使用以下几种方法:方法1:通过修改.bash_history文件这是最简单直接的方法,但是只会影响当前用户的历史记录。执行以下命令即可清除:1>~/.bash_history2history-c 方法2:使用export命令同样只会影响当前......