コンシューマー (クライアント) 側をプロデューサー (サーバー) に開発するように依頼されました。プロデューサーはプロセスを作成し、コンシューマーが共有メモリを読み取ってプロセスを削除するまで待機し、プロセスを強制終了するために制御をプロデューサーに戻します。共有メモリブロックのシャットダウン。
スリープと待機の違いを調べたところ、 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 */
みんなありがとう:)