execve:将execve调用转换为fork

时间:2013-03-25 06:18:35

标签: c++ unix

我有一个execve系统调用,用另一个覆盖我的curernt程序。代码工作正常,但我的要求是使用fork系统调用更改此execve系统调用。我正在尝试下面的事情:

pid_t child_pid;
child_pid = fork();
if(child_pid == 0) {
       if (-1 == execve(...)) //Normal previous execve call
       {
          .............
       }
}
else
{ //fork parent process
exit(0);
}

我不确定当我们用fork替换execve系统调用时我们应该注意什么。在我的子进程中,我调用现有的execve调用来保持原始流(就像没有fork一样)但是父进程应该做什么 - 我应该正常退出还是需要等待子进程退出/死掉。 execve调用将当前进程覆盖为新进程,因此不存在父/子进程的问题。

3 个答案:

答案 0 :(得分:0)

这取决于你。如果您不需要等待,那么您可以退出,在这种情况下,子进程将成为孤儿。

答案 1 :(得分:0)

如果需要知道孩子的退出状态,或者在 子流程退出后要执行某些操作,请致电wait()在父母身上。

如果不需要上述任何一项,您可以退出父进程。 init进程将由{{1}}重新设置为父级,因此不会产生任何负面影响。

答案 2 :(得分:0)

 should I normally exit or I need to wait for the child process to exit/die

这取决于您和您的要求,如果需要,您可以使用等待(...)等待子进程,看看http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Fapis%2Fwait.htm

另请查看http://linux.die.net/man/2/fork