exec系列函数 - 在进程中运行可执行文件

父进程与子进程

  父进程创建子进程,两进程的关系(两种):

  • 父子进程执行不同的代码段:父进程希望子进程继承自己的代码段并且拷贝数据段,继承打开的文件以及创建时的状态,然后父子进程执行不同的代码段。
  • 创建一个全新进程:父进程希望在子进程当中执行另外一个可执行文件,从而达到创建一个全新进程的目的。

exec系列函数

  exec函数在进程中是一系列函数,其作用是在进程中执行可执行文件。根据其不同的参数分为execl、execv、execp等函数。
  exec系列函数可以替换当前进程(执行exec函数的进程)的正文段、数据段;初始化bbs段(存放未初始化的全局变量和静态变量的一块内存区域)为0值、初始化堆栈段(来源于加载的可执行)。
在这里插入图片描述
  执行exec函数之后,当前的exec语句将会被替换成可执行文件的代码,判断条件中(一般都会为fork==0加上一个if条件)xec语句后的代码将不会被执行;exec系列函数执行成功不返回值,执行失败返回-1。
  exec系列函数不创建新进程,而是在原来的进程(创建的子进程)空间内,修改用户数据段,而没有修改PCB。也就是说,创建的子进程就是为了执行可执行代码。


不同参数的exec函数
在这里插入图片描述

1. execl

在这里插入图片描述
代码示例

#include<stdio.h>
#include<unistd.h>
int main(){
    printf("entering main process---\n");
    if(fork()==0){
        execl("/bin/ls","ls","-l",NNULL);
        printf("exiting main process ----\n");
    }
     printf("back parent! ----\n");
    return 0;
}

由这个代码运行的结果截图显示:在子进程的进程空间内,当执行execl之后,原先进程的后续代码段将会被忽略,所以printf("exiting main process ----\n");会被忽略。
在这里插入图片描述

2. execv

在这里插入图片描述

代码示例
在这里插入图片描述
execv和execl的区别在于,execv把参数当作一个字符串数组传入。

3.execle

在这里插入图片描述

示例代码(可以以此指定一个新的环境变量表)
在这里插入图片描述

exec函数之间的关系

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值