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

Linux进程替换

今日更新了Linux进程替换的内容 欢迎大家关注点赞收藏⭐️留言 进程程序替换 代码和现象 运行后,发现使用了ls命令,而且打印end的语句也不见了。...exec*函数的作用:让进程通过exec*函数把全新的程序替换到自己对应的代码和数据,然后执行新的程序。 exec*函数执行完毕后,后续的代码不见了,因为被替换了。...进程=内核数据结构+代码和数据 替换的意义是:内核数据结构不变,个别属性可能会变,用新程序的代码代替老程序的代码。 进程替换没有创建新的进程!所以调用exec*前后该进程的id并未改变。...\n"); 28 return 0; 29 } 运行结果如上图, 进程替换成功了,父进程也等待成功。上面是用fork创建子进程,让子进程替换,让子进程完成任务,而不改变父进程。...这也是进程替换的重要意义。

8010

Linux进程替换

一、进程替换         为什么要有进程替换呢???比方说我们想用fork创建一个子进程去帮助我们完成一个工作,这个工作我们需要封装成一个函数去使用,但难道我们每次都要自己写一个函数吗?...所以所谓的进程替换 就是为了让父进程和子进程执行不同的代码!! ...这就是发生了进程替换!! 1.2 进程替换的原理  所以究竟是如何做到在没有if eles的情况下让父子进程执行不同的代码呢??...所以并没有创建新的子进程,只是将该子进程的代码和数据替换了,并且内核数据结构PCB并没有释放,而仅仅只是修改了某些字段的内容。 问题2:子进程的代码和数据被替换了,为什么父进程还是执行原来的代码??...所以进程替换中,环境变量信息不会被替换!!

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

    Linux进程替换

    进程程序替换 1、代码展示效果 首先先使用execl函数,这个比较的简单,所以我们先看这样的代码 为什么我们执行我们的程序,最后跑起来的确实ls的命令?...所以execl的作用是让我们(进程)用exec*函数,执行起来新的程序。 会替换掉原本的程序,执行我们新调用的程序。...此时的进程替换并没有创建新的进程,只不过是直接用老的进程的页表来指向后来调用的代码和数据。 站在被替换的代码和数据角度来看:本质就是这个程序被加载到内存了。 怎么加载?...所以exec类似于一种Linux上的加载进程。...程序替换带来的意义! 其中数据的写时拷贝是之前的在同一个进程的运行时候会发生的事情。但是呢,像现在这个样子的时候,我们的子进程执行的代码和原来已经相差很大了,那么现在该怎么进行呢?

    7910

    Linux进程程序替换

    Linux进程程序替换也是Linux进程中非常重要的部分。我们将从什么是Linux进程程序替换,为什么要有Linux进程程序替换,以及如何实现Linux进程程序替换(原理)三个方面展开讲解。...想要弄明白为什么要有进程程序替换,我们首先要知道父进程创建子进程的目的是什么?想要子进程完成什么样的任务? 想让子进程执行父进程代码的一部分。...(这就是我们所讲的进程程序替换) 一.什么是进程程序替换 进程程序替换顾名思义,就是将其他程序替换过来继续执行,主要是通过exec* 这类函数来帮助我们替换,直接来学这类函数。...进程替换的时候,有没有创建新的进程? 没有,进程替换仅仅将物理内存中的代码和数据做了替换。虚拟内存和PCB表没有发生任何改变。...2.多进程 在理解单进程程序替换的基础上,多进程的程序替换就容易理解了。 我们先要达成一个共识:写时拷贝这种机制,不仅仅是对数据,对代码也有写时拷贝策略。

    9810

    初识Linux · 进程替换

    前言: 由前面的章节学习,我们已经了解了进程状态,进程终止以及进程等待,今天,我们学习进程替换。...2 解释原理 首先我们要清楚一个问题,进程替换的全名不是进程替换替换的不是进程,是程序,所以在进程程序替换的这个过程,本质上是没有创建新的进程的。...第一个点:进程程序替换中是没有创建新进程的,无非是程序替换了PCB里面原来的数据。...exec函数本质是一个加载函数,因为有了exec函数,在Linux中就可以将程序加载进去,因为进程程序替换的本质就是将不同的程序加载到内存里面,加载靠的就是exec*函数。...3 将代码改成多进程版本 将代码改成多线程版本,我们要做的事就是,父进程创建子进程,创建了之后,子进程执行被替换的程序,父进程只需要等待多个子进程就可以了。

    9310

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

    前言:Linux进程控制包含了进程终止,进程等待,进程程序替换。走到现在我们也只剩下进程程序替换没介绍了,那么让我们来看看进程程序替换到底是什么!...本篇主要内容: 替换原理 替换函数 实现简易shell 我们所创建的所有的子进程,执行的代码,都是父进程代码的一部分,如果我们想让子进程执行新的程序,执行全新的代码和访问全新的数据,不在和父进程有瓜葛这就要用到我们的进程替换了...替换函数 在进程程序替换中,替换函数必不可少,让我们来看看这类函数!...,因为我们用任意语言写的程序都会变成进程,只要是进程就都可以用exec*来替换——系统大于一切 4....总结 进程程序替换能够让我们只用C语言就可以调用其他任何语言去执行,极大程度上带来了便利,也可以帮助我们完成很多任务,好了,关于Linux进程控制我们先了解到这,下次我们将进入新的章节!

    9610

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

    ---- 前言 子进程 在被创建后,共享的是 父进程 的代码,如果想实现自己的逻辑就需要再额外编写代码,为了能让 子进程 执行其他任务,可以把当前 子进程 的程序替换为目标程序,此时需要用到 Linux...进程程序替换相关知识 子进程 替换为其他程序后,无法再执行原有程序,但 进程 始终为同一个 火爆全网的 ChatGTP 能否替换 “人类” ?...等指令时后,bash 会创建子进程,将其替换为对应的指令程序并执行任务,就能实现各种指令 进程程序替换图解 Linux 中的指令都是用 C语言 写的可执行程序,所以可以进行替换 bash 运行后,输入...,因为不能影响到父进程 ---- 总结 以上就是本篇关于 Linux 进程程序替换的相关内容了,在本文中,我们知道了进行程序替换的目的,学习使用了程序替换相关的七大函数,最后还观察了程序替换后的神奇现象...,在学完这些知识后,我们就可以实现一个简单的 bash,体验一下在自己程序中输入指令操控 Linux 的奇妙体验 如果你觉得本文写的还不错的话,期待留下一个小小的赞,你的支持是我分享的最大动力!

    24720

    Linux进程的程序替换

    程序替换 1.创建子进程的目的是什么? 目标:为了让子进程帮父进程执行特定的任务 具体做法:1....,父进程通过if判断分流让子进程去跑了 2.创建一个子进程不执行父进程的代码,而是让子进程在磁盘当中执行全新的程序,这种操作称之为进程的程序替换 2.了解程序是如何进行替换的 程序替换函数 execl...ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux...,用当前进程的数据替换进程的数据段 ---- 站在进程的角度 进程的程序替换有没有创建新的进程呢?...,让子进程调用execl,在调用execl把代码和数据加载到内存 所以当创建进程的时候,先有进程数据结构,再加载代码和数据 程序替换是整体替换,不是局部替换 修改test.c文件内容如下 #include

    2K30

    Linux】详解进程程序替换

    一、替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。...二、子进程进行程序替换 通过子进程进行程序替换可以让子进程帮我们去做一部分工作,而且子进程发生程序替换不会影响父进程执行,因为替换时代码和数据会发生写时拷贝。...<< endl; cout << "Hello Linux!" << endl; cout << "Hello Linux!"...\n"); return 0; }  执行结果如下,证明了我们不仅仅可以替换进程执行系统程序,还可以替换进程执行我们的程序。...无论是什么语言,只要能在Linux系统下跑,都可以用exec系列的接口进行程序替换,exec系列的接口只认二进制代码和数据。

    8410

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

    1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....\n"); return 1; } } return 0; } 运行结果: 4.进程程序替换 4.1 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支...当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。...所以要写一个shell,需要循环以下过程: 获取命令行 解析命令行 建立一个子进程(fork) 替换进程(execvp) 父进程等待子进程退出(wait) 根据这些思路,和我们前面的学的技术,就可以自己来实现一个

    15110

    Linux】开始学习进程替换吧!

    —— 尾田荣一郎《海贼王》 开始学习进程替换吧 1 前言 通过学习进程替换,我们可以体会到多语言混搭的快乐,可以从C语言直接蹦到python ,也可以从c++里运行java代码。是不是很厉害!...2 进程替换 2.1 替换函数 进程替换有六种以exec开头的函数,统称exec函数: #include ` int execl(const char *path, const char...我们知道 进程 = 内核数据结构 + 代码和数据 ,替换就是用新进程的代码与数据替换之前的代码与数据,注意不改变pid哦! 站在被替换进程的角度:本质就是这个程序别加载到内存里了!!!...exec* 就类似一个Linux 上的加载函数。 而且我们不用关心exec*函数的返回值,只要替换成功了,就不会向后运行(也就用不到它的返回值了),只要继续运行那一定就是替换失败了!!!...,然后在子进程中进行进程替换

    9210

    Linux进程理解与学习-程序替换

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux进程理解与学习Ⅰ-进程概念...【Linux进程理解与学习Ⅱ-进程状态 【Linux进程理解与学习Ⅲ-环境变量 【Linux进程理解与学习Ⅳ-进程地址空间 【Linux进程控制(创建、终止、等待) --------...下的shell--BASH 【Linux进程优先级&前后台理解 前言 在前文,我们学习了fork函数创建子进程,而创建子进程主要就是为了让它帮我们执行特定的任务。...(这里注意的是,程序替换是实现的代码与数据的整体替换)  那么这里不仅有一个问题:在进程替换时,有没有产生新的进程呢?...当然我们也可以通过代码来验证一下: ​ 多进程对应的程序替换 当然,假如我们使用fork创建子进程,让子进程完成程序替换,子进程的程序替换并不会影响父进程,这是因为父子进程都有各自独立的PCB,并且由于写时拷贝机制的存在

    1.1K30

    Linux进程控制(二.详细讲解进程程序替换

    (例如在程序里使用ls之类的指令)就可以使用进程程序替换,一开始我们先只看单进程的情况。...后面在引入多进程的情况 1.1概念 进程程序替换是指在运行过程中将一个进程的地址空间中的代码、数据和堆栈等内容完全替换为另一个程序的代码、数据和堆栈的过程。...1.3使用一个exec 系列函数 execl()函数 execl函数是Linux系统中用于执行新程序的函数之一,它属于exec函数族的一部分。...把数据从一个硬件搬到另一个硬件,只有操作系统能做 2.多进程时的程序替换 我们可以创建一个子进程,由子进程来进行程序替换,父进程来等待结果就可以。为什么?...父进程能得到子进程的执行结果 我们知道父进程与子进程映射到同一块代码,那么子进程进行程序替换后,不是会覆盖吗,替换为什么不影响父进程

    19510

    Linux进程控制:理解什么是进程创建,进程终止,进程等待 | 进程替换

    进程进程替换 在理解什么是进程替换之前,我们先来看看进程替换怎么使用,下面是操作系统提供的进程替换的一些函数 这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。...进程替换的原理: 进程替换时,只会替换掉物理内存中原来程序的代码和数据,其它的并不会动,且调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。...那么环境变量也是数据,它会被替换吗? 不会!!因为创建子进程的时候,环境变量已经被子进程继承下去了,所以进程替换不会替换环境变量。...多进程进程替换  前面的例子是单进程的执行系统命令的进程替换,接下来我们实现一个多进程的执行自己命令的进程替换。...因为在linux中,环境变量的内容是在一个区域放着的,而环境变量表 env 中存的是环境变量的地址,这些地址指向所对应的环境变量;         而我们putenv一个环境变量时,其实是在环境变量表中找一个未使用的下标

    31310

    LinuxLinux进程控制 --- 进程创建、终止、等待、替换、shell派生子进程的理解…

    将子进程添加到系统进程列表中,实际上是通过一张哈希表来完成的,Linux利用hash表来管理进程,指向PCB的指针会存到pidhash里面,然后在通过pid_hashfn哈希函数,将进程的pid转换为hash...其实是因为没有刷新缓冲区的东西,所以即使hello Linux已经加载到缓存区,也不会立即打印出来,而是等到睡眠之后调用exit结束的时候,才将缓冲区刷新,才会打印出来hello Linux。...2.进程的程序替换 2.1 单个进程的程序替换 下面函数参数中的…是可变参数列表,可以给C语言函数传递不同个数的参数。...下面是运行结果,子进程替换为ls进程,ls进程正常退出退出码为0,终止信号为0. 故意使得程序替换失败,则进程退出也是按照我们设定的退出码所退出的。 3.程序替换原理 1....当父进程派生的子进程发生程序替换时,防止父子进程原先共享的代码段和数据段被修改,操作系统会进行写时拷贝,将代码段和数据段重新复制一份给子进程,让子进程程序替换之后,不会影响父进程

    14.8K30

    Linux进程控制】四、exec函数族——进程替换详解

    进程替换的概念 我们在使用fork()系统调用之后,创建出来的子进程是对父进程的复制,也就是说子进程和父进程执行的是相同的程序,虽然说父子进程可能执行的是不同的代码分支(if else语句),但是程序流程是一样...我们要想在新创建的子进程中执行其他程序,需要调用一种exec函数来拉起一个新的进程。当进程调用一种exec函数的时候,该进程的用户空间代码和数据全部被新程序替换掉,从新程序的启动例程开始执行。...需要注意的是,调用exec并不会创建新进程,而是一种进程替换,所以调用exec前后,进程本身的ID不会改变。...用新的进程映像替换原来的进程映像。...这里面重要的是前两个execl和execlp函数,它们都用于使用一个新的进程替换原来的进程,也就是在新创建的进程中执行其他程序。

    14710

    Linux】从 fork() 到 exec():理解 Linux 进程程序替换的魔法

    1.前言 进程程序替换是指一个进程用另一个新的可执行程序来替换当前正在执行的程序,这个过程通过通过exec系列函数完成。...在Linux或UNIX系统中,进程程序替换通常发生在一个进程通过fork()创建了子进程之后,子进程用exec()函数加载和执行另一个程序。...也就是说,进程程序替换就是在不改变进程的PID(进程ID)的情况下,用一个全新的程序来替换当前的内存空间和执行内容。...子进程使用execl()来替换自己,将当前的进程映像替换为/bin/ls程序。 替换成功后,子进程开始执行ls程序的代码,将不在执行原理的代码。...在程序的替换函数,通常不会让父进程去执行,而是交给子进程去执行,因为父进程还需要进行完成它的时,同时也防止替换的程序造成程序崩溃。

    8510

    Linux下使用exec族函数进行进程替换

    版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/83692324 在Linux...虽然我们可以使用fork函数返回值的不同来使得父进程和子进程执行的代码不同。但是有时候父进程是一段c程序,子进程却是个shell。这个时候,fork就没法解决这个问题。因此exec函数是必须的。...当一个程序中使用exec函数来调用了另外的可执行文件后,那么该进程中所有的资源完全由新进程替换。...所以使用的时候应当注意,如果还想回到原来的进程继续执行,那么需要先使用fork函数来创建一个进程,在这个进程中使用exec函数来完成进程替换。这样才能保证原进程能在exec调用后不被破坏。...exec函数调用后虽然替换进程,但是却保留PID。

    1.3K20
    领券