gpt4 book ai didi

linux - 让 child 在 fork() 中等待 parent

转载 作者:太空狗 更新时间:2023-10-29 12:19:08 25 4
gpt4 key购买 nike

这个程序在父进程中获取一个句子并在子进程中以大写形式打印它。我希望 child 等待 parent 。我使用 sleep() 让子进程等待。有什么方法可以让 child 等待 parent 吗?我可以用 signal() 实现吗?提前致谢!!!

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<ctype.h>
#define size 50
main()
{
int pid,shmid,i,key=1234;
char *name,*shmaddr;
if((shmid=shmget(key,size,IPC_CREAT | 0666)) < 0)
{
perror("shmget():");
exit(1);
}
pid=fork();
if(pid < 0)
{
perror("fork():");
exit(1);
}
else if(pid == 0)
{
sleep(5); //making child to wait for parent
printf("\t\tCHILD\n\n");
if((shmaddr=shmat(shmid,NULL,0)) == (char*) -1)
{
perror("shmat():");
exit(1);
}
name=shmaddr;
i=0;
while(name[i]!='\0')
{
printf("%c",toupper(name[i]));
i++;
}
shmdt(shmaddr);
printf("\n");
exit(0);
}
else
{
printf("\t\tPARENT\n\n");
if((shmaddr=shmat(shmid,NULL,0)) == (char*) -1)
{
perror("shmat():");
exit(1);
}
name=shmaddr;
i=0;
while((name[i]=getchar()) != '\n')
i++;
name[i]='\0';
shmdt(shmaddr);
wait(NULL);
}
}

最佳答案

让 child 等待的最简单方法是使用管道。子进程阻塞读取,然后父进程在完成写入共享内存后将单个字节写入管道。只有当它消耗该字节时, child 才会继续读取。 (当然,在这个简单的场景中,不需要共享内存,因为父级可以简单地将数据写入管道而不是共享内存!)

关于linux - 让 child 在 fork() 中等待 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15338210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com