所以我要求我的程序,我再次执行相同的程序。
该程序通过getenv解析$ PATH env var(“PATH”);但由于某种原因,子进程的env $ PATH为空。
char *path = getenv("PATH");
if(fork() == 0)
{
execve(path, argv, NULL);
}
else //parent
{
wait(0);
}
答案 0 :(得分:3)
这不是你使用execve()
的方式。第一个参数是可执行文件的路径,而不是PATH环境变量。第三个参数是指定子进程的环境,当您在那里传递NULL时,子进程将不继承任何环境变量(包括PATH)。
答案 1 :(得分:0)
“原因”是您为execve
的最后一个参数传递NULL,该参数应该是以NULL结尾的name = value字符串数组,表示新进程的环境;传递NULL意味着孩子获得一个空的环境。
你也试图执行扩展的PATH变量,这一点没什么意义。