我试图弄清楚父进程和子进程的行为。下面是我的代码
#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
因此,最初只有一个进程 12248 派生出另一个进程(12249)。现在这两个过程并行运行(如果我错了,请纠正我)。理想情况下,孩子应该只在前半部分的数组a的内容中添加 1 ,而父母应该对第二部分做同样的事情。但是正如您所看到的,输出并不像预期的那样。请给建议..