我有需要运行其他程序的程序。从正常的终端会话运行时它工作正常。使用initscript运行时,它不会获得正常的shell环境,并且大多数程序都会失败。那么如何才能使用initscript?
vixie-cron似乎使用execle()并传递envp作为参数。但我很难弄清楚它是如何获得shell环境设置的。
以下是使用initscript无法正常工作的当前代码:
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
} else if (pid == 0) {
execl("/bin/sh", "/bin/sh", "-c", cmd, (char *) NULL);
exit(EXIT_FAILURE);
}
编辑:发生了一件奇怪的事。现在,即使由init脚本启动,同样的程序也可以运行。对不起,这是一个无用的问题。无论如何我得到了很好的答案。谢谢你的帮助。
答案 0 :(得分:1)
环境变量通过可选的第三个main()
参数传递给程序并由其访问。简单地将您的主要功能原型化为:
int main(int argc, char *argv[], char *envp[])
...获取对这些变量的访问权。
然后,您可以将其直接传递给exec*e()
家庭功能。
您可以在execve(2)
手册页中看到这一点。