如何通过程序更改进程的执行路径

How do I change the execution PATH of a process programatically?

本文关键字:执行 路径 进程 何通过 程序      更新时间:2023-10-16

我正在开发一个迷你shell,并试图动态设置执行路径。我使用setvar((来设置PATH,当我用getvar((检查它时,它会读取新的PATH。以下是我尝试执行的两件事:
1.我把PATH改成了/bin,我知道它包含了大多数系统功能,但没有程序可以工作。我还可以验证路径是否已在环境中设置。我使用execvp()执行命令
2.然后我使用extern char** environ获取环境并将其传递到execvpe()中,但它仍然不起作用。

我通过使用istringstream手动搜索PATH来解决这个问题,然后使用它来执行过程:

string dir;
string path = get_var("PATH");
istringstream search(path);
while(search.good()) {
    getline(search, dir, ':');
    if(dir != "") {
        struct stat st;
        if(dir[dir.length()] != '/') dir.append("/");
        string file = dir + cmdArg[0];
        //is file in dir?
        if(stat(file.c_str(), &st) == 0) {
            execvp(file.c_str(), cmdArg);
        }
    }
}