使父进程等到孩子叫exec

时间:2013-06-12 19:39:21

标签: linux fork

在linux中,在调用fork()之后,我的子进程很快将调用exec。有没有办法让父进程等待()并且在孩子执行之前不做任何事情?

感谢。

3 个答案:

答案 0 :(得分:4)

使用vfork()代替fork()。这导致父母被暂停,直到孩子退出或致电execve()系列函数。

答案 1 :(得分:2)

您需要使用waitpid使用从返回到父级的fork调用返回的进程ID。

修改

或者,如果您的意思是您想要知道孩子将要在父母中使用pause来调用exec。让孩子用适当的信号呼叫kill给父母(其进程ID可以从getppid获得)。 USR1信号可能有用。在执行官之前这样做。

答案 2 :(得分:2)

没有(API)方式让父母知道孩子正在执行exec()。

但是有一个很好的管道技巧:让孩子继承filedescriptor(对于管道)和(在fork()之前)设置管道的close-on-exec标志。当exec()关闭管道时,将通过管道上的EOF通知父级。

请注意,这不需要孩子的任何合作。