gpt4 book ai didi

c - 进程间通信 fork() - 定时 wait() 和/或 sleep()

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:58 25 4
gpt4 key购买 nike

有人要求我将消费者(客户端)端开发为生产者(服务器),生产者在其中创建进程,等待消费者读取共享内存并删除进程,然后将控制权交还给生产者杀死进程和关闭共享内存块。

我研究了 sleep 和 wait 之间的区别,并意识到只要调用 fork(),子进程就会开始运行。

下面的代码是在创建进程之后检查它们是否是父进程。如果是,他们等待(0)。 *现在我的问题是,我如何知道消费者中的代码开始执行的位置,以及如何将其传回? *

else if(pid > 0)
{
wait(0);
}

下面可以看到生产者使用的主循环。

int noToCreate = atoi(argv[2]); // (user inputs on cmd line "./prod 20 10 5" - 20 size of shared mem, 10 process to be created, 5 processes to be deleted)

while(*memSig != 2)
{
while(*memSig == 1) // set memsignature to sleep while..
{
sleep(1);
}

for(B = 0; B < noToCreate; B++)
{
pid = fork();

if(pid == -1)
{
perror("Error forking");
exit(1);
}
else if(pid > 0)
{
wait(0);
}
else
{
srand(getpid());

while(x == 0)
{
if(*randNum == 101)
{
*randNum = rand() % (100 -

1) + 1;
*pidNum = getpid();

printf("priority: %d

Process ID: %d \n", *randNum, *pidNum);

x = 1;
}
else
{
*randNum++;
*pidNum++;
}
}
exit(0);
}
} /* Closes main for loop */

if(*memSig == 0)
{
*memSig = 1;
}
} /* Closes main while loop */

谢谢大家 :)

最佳答案

wait 让父进程阻塞直到任何子进程结束。你可以使用waitpid 让父进程等待特定的子进程。

当一个子进程结束时,它会设置一个信号SIG_CHILD

关于c - 进程间通信 fork() - 定时 wait() 和/或 sleep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18053799/

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