我被要求将消费者(客户端)端开发为生产者(服务器),生产者创建进程,等到消费者读取共享内存并删除进程,然后将控制权交给生产者以杀死进程以及共享内存块的关闭。
我研究了睡眠和等待之间的区别,并意识到只要调用 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 */
谢谢一群人:)