exec

exec 函数

exec()函数通过运行其他程序来替换当前进程。

新程序启动后PID和老程序一样,就像两个程序接力跑,你的程序把进程交接给了新程序。

exec函数众多,可以分为两种类型

  • 列表函数
  • 数组函数

列表函数

execl() execlp() execle()

以上三个函数以参数列表的形式接收命令行参数

参数

程序

第一个参数告诉exec() 函数将运行什么程序。 对execl()execle()来说就是程序的绝对路径

execlp()来讲就是程序的名字,它会根据名字来查找程序。

命令行参数

需要列出想使用的命令行参数

NULL

最后一个命令行参数借宿后需要加上NULL,告诉函数没有其他参数了

环境变量(如果有的话)

如果调用了以...e()结尾的exec()函数,还可以传递环境变量数组 。

示例

数组函数

execv() execvp() execve()

数组函数将命令行参数保存在数组中

ps:上面两个函数唯一的区别就是execvp会从PATH中查找程序

总结

返回值

以上六个函数,若失败则返回-1, 若失败则不返回

代码示例

test.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(void)
{
    pid_t pid = -1;

    pid = fork();
    if (pid > 0)
    {
        // 父进程
        printf("parent, 子进程id = %d\n", pid);
    }
    else if (pid == 0)
    {
        printf("执行子进程\n");
        execl("/usr/bin/ls", "ls", "-l", NULL);
        return 0;
    }
    else
    {
        perror("fork");
        return -1;
    }
    return 0;
}

运行结果

image

posted @ 2022-09-08 16:59  我就一水  阅读(371)  评论(0)    收藏  举报