#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()
或类似的东西,但我记不住了。
答案 0 :(得分:2)
要杀死进程,你不必担心需要使用kill()
(如果你真的想要杀死它)。然后是,使用wait
或waitpid
。请记住exit()
之后/而不是打破循环。
答案 1 :(得分:1)
现在两个流程都会显示结果。
主要流程将等到收到消息,因此exit
之后只需msgsnd
。
答案 2 :(得分:0)
我怀疑你不是故意使用fork()而是意味着使用pthread_create() - 在这种情况下你会使用pthread_join()。