繁体   English   中英

如何组合/杀死fork()

[英]How to combine/kill a 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()或类似的东西,但我只是不记得了。

要杀死该进程,您毫无疑问需要使用kill() (如果您确实想杀死它)。 然后是的,请使用waitwaitpid 并记住exit()循环后/而不是退出循环。

现在,两个过程都显示结果。

主进程将一直等待直到收到消息,因此只需在msgsnd之后exit即可。

我怀疑您不是要使用fork(),而是要使用pthread_create(),在这种情况下,您应该使用pthread_join()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM