c-仅在挂起子进程后运行父进程代码



我有一个进程P1。我通过fork创建一个子代码,然后在fork的子代码部分执行。我想挂起子代码,然后只在子代码挂起后执行父代码的其余部分。知道我该怎么做吗?

int pid=fork();
if(pid==0)
{ 
//Do something in here
} 
else 

{暂停孩子并做其他事情,只有在孩子被暂停之后}

在我看来,最简单的同步机制是一个简单的管道。如果您希望孩子在执行之前等待,请在读取时阻止它。例如:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char **argv)
{
int p1[2];
int c;
if( pipe(p1)) {
perror("pipe");
return EXIT_FAILURE;
}
switch( fork() ) {
case -1:
perror("fork");
return EXIT_FAILURE;
case 0:
read(p1[0], &c, 1); /* wait on the parent */
close(p1[0]);
close(p1[1]);
execlp("echo", "echo", "foo", NULL);
perror("exec");
return EXIT_FAILURE;
default:
puts("This will always print first");
fflush(stdout);
write(p1[1], &c, 1); /* tell the child to continue */
close(p1[1]);
close(p1[0]);
}
return EXIT_SUCCESS;
}

如果你想让孩子在挂起它之前执行,你可以尝试发送SIGSTOP并让它继续使用SIGCONT,但这真的没有意义。如果你这样做,你就无法知道孩子什么时候会停止,甚至在你发送SIGSTOP之前,它可能会运行到完成。如果您有其他外部同步方法(例如,子级正在向文件系统写入,并且您可以监视它(,则应该使用该方法使子级挂起自己。尝试使用SIGSTOP/SIGCONT将有许多竞争条件,无论如何都需要处理这些条件。最好的办法是用类似上面的东西来延迟exec

最新更新