2

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

谢谢。

4

3 回答 3

3

使用vfork()而不是fork(). 这会导致父级被挂起,直到子级退出或调用execve()函数族之一。

于 2013-06-12T20:44:32.260 回答
3

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

但是有一个很好的管道技巧:让孩子继承一个文件描述符(用于管道)并(在 fork() 之前)为管道设置 close-on-exec 标志。当 exec() 关闭管道时,管道上的 EOF 将通知父级。

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

于 2013-06-12T20:10:07.040 回答
2

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

编辑

或者,如果您的意思是您想知道孩子将要在父母中调用 exec 使用pause。让子进程调用kill并向父进程发出合适的信号(其进程 ID 可以从getppid获得)。USR1 信号可能有用。在执行之前执行此操作。

于 2013-06-12T19:43:33.043 回答