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

【Linux系统编程】八、进程程序替换

所以 进程替换是为了让子进程能够执行其它程序的代码;进程替换就是以写时拷贝的策略,让第三方进程的代码和数据替换到父进程的代码和数据,给子进程用,因为进程间具有独立性,所以不会影响父进程。...进程替换函数 一、替换函数 ​ 一共有七个替换函数,统称为 exec 函数: #include // 系统调用 int execve(const char *filename, char...,而我们调用 exec*e 的时候,只是将参数中的 envp 数组中内的环境变量传了过去,所以替换后只能查看到我们传过去的环境变量,而不能看到系统中的环境变量! ​...它的 原理其实就是被 execve 这个系统函数调用的,通过 execve 函数传递 argc、argv、env 给 main 函数!所以 exec* 在 linux 中也称为 加载器! ​...​ 因为我们用的是 myargv 数组存放我们的子串,并且我们习惯输入指令是不带路径的,所以我们要用带有 v 和 p 的,最后选择的函数就是 execvp !

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

    【Linux】进程替换

    会替换掉原本的程序,执行我们新调用的程序。 2、原理解释 就是把原本的代码和数据段替换成我们后来调用的需要执行的代码和数据。 所以原本我们写的printf程序结束的标志就没有看到这样的结果。...此时的进程的替换并没有创建新的进程,只不过是直接用老的进程的页表来指向后来调用的代码和数据。 站在被替换的代码和数据角度来看:本质就是这个程序被加载到内存了。 怎么加载?...所以exec类似于一种Linux上的加载进程。...==之前我们讲过,操作系统对于任何人来说都不会相信的,所以exec函数把一个存在磁盘外设中的代码数据能够运行起来,那就说明其中的exec*要么本身属于系统调的函数,要么就是其中的内核包括系统调用。...== execl的返回值几乎可以不用关心,因为只要替换成功的话,即使能够返回的话,也没有任何的效果。

    8110

    Linux:进程替换

    1.1 简单的进程替换引入      为了完成程序替换的工作,让某些可执行程序可以让子进程去使用从而让他实现和父进程执行完全不同的代码,存在一些以exel形式的系统调用接口 我们会发现这里并没有if...——>Linux中的可执行程序,是有自己的组织形式的,也就是有自己的格式的(有一张表),我们把这个格式叫做ELF ,比方说这个格式将代码段、数据段、只读数据区这些各个区域的其实地址都分好了,而main函数就在表头...1.3  探究各个程序替换的接口          一共有七个接口,其实2号手册的这个是系统调用接口,而3号手册的这六个是库函数,他们的区别就有点像exit和_exit的区别 其实库函数是做更进一步的封装...1.5.2 执行其他编译型语言或者是脚本语言       Shell脚本  本质上就是把Linux命令放在一个文件里面(后缀sh),并且文件的开头都是#!+脚本语言的解释器。   ... 问题:子进程要去执行程序的时候,要选择exec系列的那个函数呢??

    13410

    linux vi 替换

    基本的替换 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ 替换第.../vivian/s//sky/g) 替换每一行中所有 vivian 为 sky 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 :s#vivian/#sky/# 替换当前行第一个 vivian.../ 为 sky/ :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/ 删除文本中的^...M 问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。.../s//str2/g 功能同上 从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作

    8.4K20

    【Linux】进程替换

    今日更新了Linux的进程替换的内容 欢迎大家关注点赞收藏⭐️留言 进程程序替换 代码和现象 运行后,发现使用了ls命令,而且打印end的语句也不见了。...如上图,没有lss命令,所以替换会失败。如果替换成功,就不会向后继续运行。所以只要继续运行了,就一定是替换失败了。...有了p,系统会自动在环境变量PATH中进行查找。 注意上面的参数1表示我想执行谁,参数2表示我想怎么执行。 二者含义不一样。...所以运行结果如下图: 对于main函数的子进程,它的父进程main本身也是bash的子进程,所以可以通过环境变量的第三方指针extern char** environ 获取系统的环境变量。...事实上,只有execve是真正的系统调用,其它五个函数最终都调用 execve,所以execve在man手册 第2节,其它函数在 man手册第3节。

    8710

    【Linux】进程程序替换

    Linux进程程序替换也是Linux进程中非常重要的部分。我们将从什么是Linux进程程序替换,为什么要有Linux进程程序替换,以及如何实现Linux进程程序替换(原理)三个方面展开讲解。...假如:子进程要对代码进行修改,操作系统为其分配一段新的内存空间,让其存放新的代码和附带数据,依旧保持内存的独立性。 所以,依旧还是两个进程在运行,并未产生新的进程。...不冲突,第一个是告诉系统我要执行谁,一个是告诉系统我要如何执行。 运行一下 2.execv v:vector,可以将执行参数放入数组中,进行同一传递。而不用使用可变参数方案。...\n"); } 运行一下: 3.execle e:传入自定义环境变量,即可以查询系统中的环境变量。...execve这个函数是系统调用接口,感兴趣的可以自己查一下。 四.如何利用程序替换函数调用自己写的程序 我们自己写的程序也是可执行程序,理论上也是可以使用程序替换函数进程程序替换的。

    10410

    linux替换大文件内容,Linux批量替换文件内容

    今天测试人员一不小心把导航的地址改错了,大约6000多个导航文件,要通过后台配置的话也很麻烦,可以通过linux命令实现对批量文件进行内容替换,但是技术经理不在,我对linux命令不熟,没办法只好硬着头皮来...经在网上一番辛苦搜索,找到以下几个命令,并尝试执行……最终终于实现效果,哎,“书到用时方恨少”,特此针对今天的情况总结了一下Linux批量替换文件内容的命令, 第一种: 格式:sed -i “s/oldstr.../newstr/g” filesname 说明:oldstr 需要替换的旧字符串 newstr 替换后的新字符串 filesname 批量文件名称,支持正则,如:ST_*.json 案例...: 如果我想把ST_*.json下面的文件里的“today” 替换为“tomorrow”,那就是: sed -i “s/today/tomorrow/g” ST_*.json 但是这种命令有一个缺陷,就是替换的文件数量有限制...替换后的新字符串 path 文件路径名称 案例: 如果我想把/app/web/sitemap下面的文件里的“today” 替换为“tommorow”,那就是: grep today -

    8.7K30

    初识Linux · 进程替换

    进程替换我们从如下几个点开始介绍,第一,直接看现象,第二,解释原理,第三,将代码改成多线程版本,第四,使用所有的替换函数,认识参数的含义。 废话不多说,直接进入主题。...2 解释原理 首先我们要清楚一个问题,进程替换的全名不是进程替换,替换的不是进程,是程序,所以在进程程序替换的这个过程,本质上是没有创建新的进程的。...第一个点:进程程序替换中是没有创建新进程的,无非是程序替换了PCB里面原来的数据。...这里我们不妨设想一个点,如果PCB里面是自己替换自己的多没意思,如果.cpp文件里的PCB可以被Java替换,shell脚本替换,岂不美哉? 第二个点,exec函数的作用是什么?...exec函数本质是一个加载函数,因为有了exec函数,在Linux中就可以将程序加载进去,因为进程程序替换的本质就是将不同的程序加载到内存里面,加载靠的就是exec*函数。

    9510

    Linux-程序替换

    文章目录: 进程控制 execl接口介绍 多进程版本程序替换 其他exec接口 接口介绍 替换本地程序 总结 前言:   在Linux系统中,进程程序替换是一种重要的操作,通过进程程序替换,...在Linux下是可实现的,因为Linux给我们提供了对应的接口:   这些接口支持我们程序在运行的过程中进行程序替换,从而执行到自己想执行的程序。...首先,这些接口中带有 ‘p’ 字符的接口都有 path 这个参数,实际上这个参数的意义是: PATH: 并不需要告诉系统程序的具体位置,只需要告诉系统程序的名称,系统在进行替换的时候,会自动在PATH...  我们前面的程序替换全部都是使用系统提供好的程序,我们使用自己写的程序该当何如?...程序替换 不看 是什么 语言 的程序,因为 在Linux下运行起来都是进程。  七个接口只有 execve 是系统调用,其他6个全是由此接口进行封装。   创作不易,还望三联支持博主呀~~

    11810

    GoDaddy虚拟主机选择Windows系统还是Linux系统

    以前在旧版Godaddy商家购买的虚拟主机采用的是官方自己开发的面板(老蒋也忘记叫什么名称),当时如果在新购买的时候选择Windows或者Linux系统,以后在使用过程中希望切换其他的系统直接在面板中切换就可以...但是从2013年开始(Godaddy主机采用新面板带来的竞争优势),Godaddy官方采用主流的cPanel和Plesk面板分别管理Linux和Windows虚拟主机之后,相互之间是不可以切换的。...所以,在新购买的时候我们需要考虑好自己的项目网站需要哪种系统的环境。...如果我们的网站是PHP+MYSQL程序,希望兼容的较好,老蒋建议直接就用LINUX系统主机,如果我们的网站是ASP程序,那就用WINDOWS系统的主机。...当然,如果你希望最大化利用虚拟主机,而且有ASP和PHP程序,可以选择WINDOWS主机,因为GODADDY的WINDOWS主机支持PHP+MYSQL语言。

    3.1K20

    【Linux】进程的程序替换

    2.了解程序是如何进行替换的 程序替换函数 execl 输入 man execl 查看程序替换接口 int execl(const char *path, const char *arg, ...)...ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux...页表 也会自己的映射关系 虽然代码有可能是跟父进程共享,当子进程进行程序替换的时候,子进程会加载新进程的代码和数据 操作系统会发生写时拷贝,将代码和数据进行区分 ,使子进程形成新的映射关系...,依旧可以执行ls指令 3. execlp int execlp(const char *file, const char *arg, ...); 带p:代表当执行程序的时候,只需要指定程序名即可,系统会自动在...依旧可以执行ls指令 ---- 4. execvp int execvp(const char *file, char *const argv[]); 带p:代表当执行程序的时候,只需要指定程序名即可,系统会自动在

    2K30

    揭开Linux系统神秘面纱,选择Centos、Debian、Ubuntu?

    操作系统是计算机系统的核心基础,不同的操作系统具有不同的优势和特点,目前市场上有多种操作系统,其中 CentOS、Debian 和 Ubuntu 是三种常用的 Linux 操作系统,它们都是开源软件,可以免费使用...二、CentOS的优势和特点CentOS 是一种以企业级应用为主要目标的 Linux 发行版,它是由 Red Hat Linux 代码衍生而来的操作系统,因此其完全兼容 Red Hat Enterprise...1.稳定性:Debian 以稳定性著称,在软件包的选择和更新方面相对保守,可以保证系统的稳定性。...七、总结CentOS、Debian 和 Ubuntu 三种 Linux 操作系统各具优势和适用场景。...因此,选择适合自己需求的操作系统非常重要,可以帮助用户提高效率和使用体验。

    8.1K30

    选择Linux

    虽然确实可以在任何操作系统上完成我在工作之外所做的各种工作,但是我选择在Linux上进行工作主要是因为它是免费的,并且它几乎可以作为一个很出色的解决方案,提供了一个平台,我可以修补我感兴趣的东西。...人们很容易忘记苹果是一家硬件公司——他们不断淘汰现有的硬件,以便一次又一次地把它卖给你——并且阻止你试图在别人的硬件上运行他们的软件。...当然,这意味着更多的选择,以及一个正常运作的各种生态系统——包括进化和自然选择。 我得想办法把它画出来。...我把这篇文章命名为“选择Linux”,并在整个独白中保持中立,到目前为止,我的态度是令人恼火的公平。我想归根结底,我选择在工作之外使用Linux的主要原因是我必须在工作中使用Windows。...我不仅可以选择Linux,我还可以选择我所使用的Linux的发行版本,这已经随着时间的推移发生了变化。上周我运行了“Manjaro”,在“Elementary OS”和“Ubuntu”之前的一周。

    92720
    领券