什么时候需要execle而不是execl?

时间:2018-08-10 18:05:30

标签: c environment-variables exec

考虑这个简单的C程序

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

int main()
{
    if (fork() == 0)
    {
        execl("script.sh", "script.sh", NULL);
        exit(EXIT_FAILURE);
    }
    int status;
    wait(&status);
    if (WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS)
    {
        return 0;
    }
    return -1;
}

script.sh

#!/bin/bash

case $DEBUG in
true)
    echo "Debug mode on"
    ;;
*)
    echo "Debug mode off"
    ;;
esac

如果我使用gcc -o foo main.c编译C程序并使用

调用

DEBUG=true ./foo

然后输出为Debug mode on,因此即使我没有使用foo,脚本实际上也获得了我传递给程序execle的环境变量。那么在哪种情况下有必要使用execle(除了不想直接在源代码中指定环境变量之外)?我说的是人们在做类似的事情

extern char **environ;
...
execle(path, path, NULL, environ)

这是什么目的?

1 个答案:

答案 0 :(得分:5)

当您不希望继承环境时(您希望可执行文件以空环境或专门为其设置的环境开头)。