[英]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()
(如果您确实想杀死它)。 然后是的,请使用wait
或waitpid
。 并记住exit()
循环后/而不是退出循环。
现在,两个过程都显示结果。
主进程将一直等待直到收到消息,因此只需在msgsnd
之后exit
即可。
我怀疑您不是要使用fork(),而是要使用pthread_create(),在这种情况下,您应该使用pthread_join()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.