視認性を高めるために、コードを変更しました
int main(void)
{
int index;
for (index = 1; index < 4; index++)
{
printf("We are in loop with process id=%d\n",getpid());
if(!fork()) { //Child process
printf("Came inside chid with process id=%d\n",getpid());
// _exit(0);
} else { //Parent process
printf("Came inside parent with process id=%d\n",getpid());
}
}
printf("We are out of loop with process id=%d\n",getpid());
exit(0);
}
[OP]
We are in loop with process id=2258 -----> Main Parent
Came inside parent with process id=2258
We are in loop with process id=2258
Came inside child with process id=2259
We are in loop with process id=2259
Came inside parent with process id=2258
We are in loop with process id=2258
Came inside parent with process id=2259
We are in loop with process id=2259
Came inside parent with process id=2258
We are out of loop with process id=2258 ----> "Outer block of loop referring main Parent Here exit(0) will rip parent process of pid 2258 "
Came inside parent with process id=2259
We are out of loop with process id=2259
Came inside child with process id=2263
We are out of loop with process id=2263
Came inside child with process id=2261
We are in loop with process id=2261
Came inside parent with process id=2261
We are out of loop with process id=2261
Came inside child with process id=2264
We are out of loop with process id=2264
Came inside child with process id=2262
Came inside child with process id=2260
We are out of loop with process id=2262
We are in loop with process id=2260
Came inside parent with process id=2260
We are out of loop with process id=2260
Came inside child with process id=2265
We are out of loop with process id=2265
最初に、fork が 1 つの子を生成するたびに 3 回実行されるループを検討する必要があります。このループには確実に 1 つの親があり、実行はスケジューリングに完全に依存し、子または親になる可能性があります。
反復値が増えると、これを理解するのが本当に頭を悩ませることになります。
今、子供をきれいにしましょう
int main(void)
{
int index;
for (index = 1; index < 4; index++)
{
printf("We are in loop with process id=%d\n",getpid());
if(!fork()) { //Child process
printf("Came inside chid with process id=%d\n",getpid());
_exit(0);
} else { //Parent process
printf("Came inside parent with process id=%d\n",getpid());
}
}
printf("We are out of loop with process id=%d\n",getpid());
exit(0);
}
We are in loop with process id=2393
Came inside parent with process id=2393
We are in loop with process id=2393
Came inside chid with process id=2394
Came inside parent with process id=2393
We are in loop with process id=2393
Came inside parent with process id=2393
We are out of loop with process id=2393
Came inside chid with process id=2396
Came inside chid with process id=2395
したがって、上記の OP はより明確になり、親の実行が 3 回、子の実行が 3 回になりました。