我有简单的C程序,它使用fork()和execl()来执行应用程序。如果execl()无法运行应用程序,那么我必须在父进程中调用一个函数并退出子进程。如果execl()成功运行应用程序,那么我已经显示父进程的成功日志。因此,父进程应该等待子进程的execl()调用(只是调用,直到应用程序执行结束),获取有关它的状态信息,然后做出决定并继续执行。这是我的代码。如何在C程序中调用execl()之后控制父进程的执行?
int main()
{
int iExecRetVal, pid;
pid = fork();
if (pid == -1)
{
}
else if (pid > 0)
{
}
else
{
iExecRetVal = execl("./flute-static", "./flute-static", "-send", "-a192.168.190.1/6666", "JFlute.1.2.tar.gz", NULL);
if (iExecRetVal == -1)
{
/*execl() failed, need some error handling in the parent process*/
}
_exit(0);
}
/*Parent's normal execution*/
}
int HandleSuccessFromParent()
{
/*Should be called when exec call was successful*/
}
int HandleFailureFromParent()
{
/*Should be called when exec call was NOT successful*/
}
我们知道execl()不会成功返回。因此,如何在子节点中的execl()调用后正确调用HandleSuccessFromParent()和HandleFailureFromParent()函数。请帮帮我。
确实如此,但对我们大多数人来说,这可能太高科技了。我在实践中更喜欢[Jonathan Leffler的回答](http://stackoverflow.com/a/26617152/841108)。 – 2014-10-28 21:00:34