Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在 linux 中,调用 fork() 后,我的子进程将很快调用 exec。有没有办法让父进程等待()并且在孩子执行之前不做任何事情?
谢谢。
使用vfork()而不是fork(). 这会导致父级被挂起,直到子级退出或调用execve()函数族之一。
vfork()
fork()
execve()
父母没有(API)方法知道孩子正在执行 exec()。
但是有一个很好的管道技巧:让孩子继承一个文件描述符(用于管道)并(在 fork() 之前)为管道设置 close-on-exec 标志。当 exec() 关闭管道时,管道上的 EOF 将通知父级。
请注意,这不需要孩子的任何合作。
您需要使用从返回给父级的fork调用返回的进程 ID来使用waitpid 。
编辑
或者,如果您的意思是您想知道孩子将要在父母中调用 exec 使用pause。让子进程调用kill并向父进程发出合适的信号(其进程 ID 可以从getppid获得)。USR1 信号可能有用。在执行之前执行此操作。