在linux中,在调用fork()之后,我的子进程很快将调用exec。有没有办法让父进程等待()并且在孩子执行之前不做任何事情?
感谢。
答案 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通知父级。
请注意,这不需要孩子的任何合作。