所以我分叉了我的程序,然後再執行相同的程序。
此程序通過getenv(「PATH」)解析$ PATH env var;但由於某些原因,env $ PATH對於子進程是空的。
char *path = getenv("PATH");
if(fork() == 0)
{
execve(path, argv, NULL);
}
else //parent
{
wait(0);
}
所以我分叉了我的程序,然後再執行相同的程序。
此程序通過getenv(「PATH」)解析$ PATH env var;但由於某些原因,env $ PATH對於子進程是空的。
char *path = getenv("PATH");
if(fork() == 0)
{
execve(path, argv, NULL);
}
else //parent
{
wait(0);
}
這不是你如何使用execve()
。第一個參數是可執行文件的路徑,而不是PATH環境變量。第三個參數是您爲子進程指定環境的位置,當您在那裏傳遞NULL時,子進程將不繼承環境變量(包括PATH)。
是的,我很抱歉,我應該明確指出,這不是路徑env,而是文件路徑。謝謝你的幫助。 – user1795609
「原因」可能是您爲execve
的最後一個參數傳遞NULL,該參數應該是以NULL =結尾的name = value字符串數組,表示新進程的環境;傳遞NULL意味着孩子得到一個空的環境。
你也試圖執行擴展的PATH變量,這開始沒什麼意義。
你究竟想要做什麼? 'execve()'的使用沒有任何意義。 –