2014-06-29 33 views
0

我有需要運行其他程序的程序。它從正常的終端會話運行時工作正常。當使用initscript運行時,它不會獲得正常的shell環境,大多數程序都會失敗。那麼我怎麼才能讓它和initscript一起工作呢?獲取使用execle的shell環境

vixie-cron似乎使用execle()並將envp作爲參數傳遞。但我很難弄清楚它是如何得到shell env設置的。

這裏是一個正確不工作與初始化腳本當前代碼:

pid = fork(); 
if (pid < 0) { 
    exit(EXIT_FAILURE); 
} else if (pid == 0) { 
    execl("/bin/sh", "/bin/sh", "-c", cmd, (char *) NULL); 
    exit(EXIT_FAILURE); 
} 

編輯:一件怪事發生。現在相同的程序即使在初始化腳本啓動時也可以正常運行。對不起,這是一個沒用的問題。反正我得到了很好的答案。謝謝你的幫助。

+2

什麼是不工作?什麼是錯誤?你爲什麼不在你的代碼中報告錯誤?這似乎是面對意外行爲時所做的第一件事情...... –

+0

(shell)環境可能很大程度上取決於運行進程的用戶。你檢查過了嗎? – alk

+0

獲取環境變量的常用方法是調用getenv()。這可能是你看不到的。 –

回答

1

環境變量傳遞給您的程序並通過可選的第三個參數main()訪問。簡單的原型如下主要功能:

int main(int argc, char *argv[], char *envp[]) 

...獲得訪問這些變量。

然後您可以直接將它傳遞給exec*e()家庭功能。

您可以在execve(2)手冊頁中看到記錄。