如何组合/杀死一个fork()

时间:2011-12-17 18:16:35

标签: c linux parallel-processing fork

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>

struct mbuffer{
    long mtype;
    int  mtext;
}stResult;

int main(){
    int iPID;
    stResult.mtext=0;
    stResult.mtype=6;
    iPID=fork();
    if(iPID<0){
        printf("Error....!\n");
        exit(1);
    }
    //... declarations for msgget()
    int msgflg,msgid,msgsize;
    msgflg = IPC_CREAT|0777;
    msgsize=0;
    key_t key;
    key=70;
    //... msgget();
    msgid=msgget(key,msgflg);
    if(iPID>0){
        stResult.mtext += 10;
        //msgsnd();
        msgsnd(msgid,&stResult,sizeof(stResult),msgflg);
    }
    else if(iPID==0){
        //msgrcv();
        while(1){
    msgsize=msgrcv(msgid,&stResult,sizeof(stResult),stResult.mtype,msgflg);
            if(msgsize>0){
                stResult.mtext += 20;
                break;
            }           
        }
    }
    //I want to combine/kill these processes here
    //and show this: "Result:30"
    wait();
    printf("Result:%d\n",stResult.mtext);
    //Here I see two results like:"Result=10","Result=30"
    return 0;
}

我正在使用fork()来创建两个进程,而我正在使用msgget();来进行通信。我想要的是一个整数。在其中一个过程中增加它,然后在第二个过程中增加并显示总结果。最后我总结果+第一次增加后的第一个结果。我在学年里使用join()或类似的东西,但我记不住了。

3 个答案:

答案 0 :(得分:2)

要杀死进程,你不必担心需要使用kill()(如果你真的想要杀死它)。然后是,使用waitwaitpid。请记住exit()之后/而不是打破循环。

答案 1 :(得分:1)

现在两个流程都会显示结果。

主要流程将等到收到消息,因此exit之后只需msgsnd

答案 2 :(得分:0)

我怀疑你不是故意使用fork()而是意味着使用pthread_create() - 在这种情况下你会使用pthread_join()。