簡體   English   中英

在c中殺死孩子后,嘗試從孩子向父親添加變量時,fork提供了奇怪的輸出

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

我在一個用fork();創建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是子變量,j是父變量,k是要搜索的數字)

但是我用wait(&status);關閉了子進程wait(&status); 然后做輸出。 有沒有一種方法可以將不同過程的兩個變量組合在一起並一起輸出。

這是完整的代碼:

#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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM