• Linux exec函数族


    1. 概念:

    exec函数族提供了一种在进程中启动另一个程序执行的方法。
    它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、
    代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了

    2. 何时使用exec?

    1)当进程认为自己不能再为系统和用户做出任何贡献了时就可以调用exec函数,让自己执行新的程序

    2)如果某个进程想同时执行另一个程序,它就可以调用fork函数创建子进程,然后在子进程中调用任何一个exec函数。
      这样看起来就好像通过执行应用程序而产生了一个新进程一样

    3.相关函数:
      int execl(const char *path, const char *arg, ...);
      int execv(const char *path, char *const argv[]);
      int execle(const char *path, const char *arg, ..., char *const envp[]);
      int execve(const char *path, char *const argv[], char *const envp[]);
      int execlp(const char *file, const char *arg, ...);
      int execvp(const char *file, char *const argv[]);
      l : list列表,参数要以列表形式,展现出来。
      p : path路径,从系统环境变量中去找可执行文件
      v : 向量数组,将列表的参数装到数组中去。
      e : 函数传递指定参数envp,允许改变子进程的环境,无后缀e时,子进程使用当前程序的环境。envp也是一个以NULL结尾的字符串数组指针


    4.使用区别:
    1)可执行文件查找方式
      无p:指定完整的文件目录路径,
      有p:只给出文件名,系统会自动从环境变量“$PATH”所包含的路径中进行查找。
    2)参数表传递方式
      有l:表示逐个列举的方式;
      有v:表示将所有参数构造成指针数组传递,其语法为char *const argv[]
    3)环境变量的使用
      exec函数族可以默认使用系统的环境变量,也可以传入指定的环境变量。
      这里,以“e”(Enviromen)结尾的两个函数execle、execve就可以在envp[]中传递当前进程所使用的环境变量,一般为NULL即可

    例子:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    /*
    int execl(const char *path, const char *arg, ...);
    int execlp(const char *file, const char *arg, ...);
    int execle(const char *path, const char *arg,
            ..., char * const envp[]);
    int execv(const char *path, char *const argv[]);
    int execvp(const char *file, char *const argv[]);
    int execvpe(const char *file, char *const argv[],
            char *const envp[]);
    */
    
    
    int main(int argc, const char *argv[])
    {
        // 1
        execl("/bin/ls","ls","-l",NULL);
        printf("AAAA
    ");
    // 2 execlp("ls","ls","-l",NULL); // 3 char *buf[] = {"ls","-l",NULL}; execv("/bin/ls",buf); return 0; }

    测试: 只有1 会执行,后面的都不执行, 因为exec启动的进程取代了原来的 数据段,代码段,堆栈段 printf 也不会执行

  • 相关阅读:
    Nginx配置虚拟主机
    TCP有限状态机
    一次完整的HTTP请求过程
    129 爬虫 requests request 爬图片
    算法: 二分查找 冒泡 插入 选择排序
    121 monogdb安装, 增删改查, mongodb中的update修改器 pymomgo
    119 websocket 群聊 单聊 websocket的握手 加密解密
    118 falsk智能机器人 语音合成 语音识别
    117 flask中的上下文实现原理 偏函数 线程 setattr
    python基础中的内置方法:
  • 原文地址:https://www.cnblogs.com/electronic/p/10932525.html
Copyright © 2020-2023  润新知