親プロセスと子プロセスの動作を理解しようとしています。以下は私のコードです
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int i,j,cnt=0;
int pid,present_pid;
int a[10];
for(i=0; i<10; i++) {
a[i] = i;
}
i = 0;
j = 5;
present_pid = getpid();
printf("Now in process %d\n",getpid());
printf("\n*******************before fork******************\n");
for(i=0;i<10;i++) {
printf(" %d",a[i]);
}
printf("\n*******************before fork******************\n");
int ret = fork();
if(ret == 0) {
printf("\n*******************after fork******************\n");
printf("Now in process %d\n",getpid());
printf("Child Process created");
for(i=0; i<5; i++) {
a[i]= +1;
i++;
}
}
else if(ret > 0) {
printf("\nNow in process %d\n",getpid());
for(j=5; j<10; j++) {
a[j] = +1;
j++;
}
wait();
}
for(i=0;i<10;i++) {
printf(" %d",a[i]);
}
return 0;
}
これはプログラムの出力です
Now in process 12248
*******************before fork******************
0 1 2 3 4 5 6 7 8 9
*******************before fork******************
*******************after fork******************
Now in process 12249
Child Process created 1 1 3 3 5 5 6 7 8 9
Now in process 12248
0 1 2 3 4 6 6 8 8
したがって、最初は、別のプロセス (12249) をフォークするプロセス 12248 が 1 つしかありません。これで、両方のプロセスが並行して実行されます (間違っている場合は修正してください)。理想的には、子は配列aの内容に前半のみに1 を追加し、親は 2 番目の部分に同じことを行う必要があります。しかし、ご覧のとおり、出力は期待どおりではありません。提案をしてください..