在 c 中杀死 child 后尝试将变量从 child 添加到父亲时,fork 给出了奇怪的输出

fork is giving weird output when trying to add variable from child to father after killing child in c

我在一个程序中遇到了这个奇怪的问题,我在该程序上创建了 2 个带有 fork(); 的进程,然后我在一个数组中搜索用户输入的特定值。在测试版本中,我在此数组中搜索值 6。

int vet[max]={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,0,6};

所以输出是:

ci sono 2 di 6
ci sono 1 di 6

这是我的输出语句:printf("ci sono %i di %i\n",l+j,k);(l 是 child 变量,j 是父变量,k 是要搜索的数字)

但我用 wait(&status); 关闭了 child 进程,然后进行了输出。有没有办法把不同进程的两个变量合并在一起输出。

完整代码如下:

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>         //Fork
#include <sys/wait.h>       //wait
#include <sys/types.h>      //getpid
#include <time.h>
#define max 20

int main(){
    int i,k,l=0,j=0,pid;
    int status;
    int vet[max]={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,0,6};
    //srand(time(NULL));
    //for(i=0;i<max;i++){
    //  vet[i]=rand()%100+1;
    //}
    printf("Inserire il valore da trovare: ");
    scanf("%i",&k);
    pid=fork();
    if(pid<0){
        printf("ERRORE\r\n");
        return 0;
    }
    if(pid==0){
        for(i=0;i<max/2;i++){
            if(vet[i]==k){
                l++;                
            }
        }
        //printf("trovati figlio %i\n",l);
        wait(&status);
    }else{
        for(i=max/2;i<max;i++){
            if(vet[i]==k){
                j++;                
            }
        }
    }
    printf("ci sono %i di %i\n",l+j,k);
return 0;
}

不是很正统,但你可以这样做:

if(pid!=0){
    for(i=0;i<max/2;i++){
        if(vet[i]==k){
            l++;                
        }
    }
    //printf("trovati figlio %i\n",l);
    wait(&j);
    j = WEXITSTATUS(j);
}else{
    for(i=max/2;i<max;i++){
        if(vet[i]==k){
            j++;                
        }
    }
    return j;
}