对于fork进程,getenv($ PATH)为空

时间:2013-02-05 23:47:53

标签: c fork

所以我要求我的程序,我再次执行相同的程序。

该程序通过getenv解析$ PATH env var(“PATH”);但由于某种原因,子进程的env $ PATH为空。

char *path = getenv("PATH");
if(fork() == 0)
{
    execve(path, argv, NULL); 
}
else //parent
{
    wait(0);
}

2 个答案:

答案 0 :(得分:3)

这不是你使用execve()的方式。第一个参数是可执行文件的路径,而不是PATH环境变量。第三个参数是指定子进程的环境,当您在那里传递NULL时,子进程将不继承任何环境变量(包括PATH)。

答案 1 :(得分:0)

“原因”是您为execve的最后一个参数传递NULL,该参数应该是以NULL结尾的name = value字符串数组,表示新进程的环境;传递NULL意味着孩子获得一个空的环境。

你也试图执行扩展的PATH变量,这一点没什么意义。