2014-06-29 35 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)手册页中看到记录。