2013-02-05 40 views
-2

所以我分叉了我的程序,然後再執行相同的程序。

此程序通過getenv(「PATH」)解析$ PATH env var;但由於某些原因,env $ PATH對於子進程是空的。

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

你究竟想要做什麼? 'execve()'的使用沒有任何意義。 –

回答

3

這不是你如何使用execve()。第一個參數是可執行文件的路徑,而不是PATH環境變量。第三個參數是您爲子進程指定環境的位置,當您在那裏傳遞NULL時,子進程將不繼承環境變量(包括PATH)。

+0

是的,我很抱歉,我應該明確指出,這不是路徑env,而是文件路徑。謝謝你的幫助。 – user1795609

0

「原因」可能是您爲execve的最後一個參數傳遞NULL,該參數應該是以NULL =結尾的name = value字符串數組,表示新進程的環境;傳遞NULL意味着孩子得到一個空的環境。

你也試圖執行擴展的PATH變量,這開始沒什麼意義。