在 c 中杀死 child 后尝试将变量从 child 添加到父亲时,fork 给出了奇怪的输出
fork is giving weird output when trying to add variable from child to father after killing child in c
我在一个程序中遇到了这个奇怪的问题,我在该程序上创建了 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 是 child 变量,j 是父变量,k 是要搜索的数字)
但我用 wait(&status);
关闭了 child 进程,然后进行了输出。有没有办法把不同进程的两个变量合并在一起输出。
完整代码如下:
#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;
}
我在一个程序中遇到了这个奇怪的问题,我在该程序上创建了 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 是 child 变量,j 是父变量,k 是要搜索的数字)
但我用 wait(&status);
关闭了 child 进程,然后进行了输出。有没有办法把不同进程的两个变量合并在一起输出。
完整代码如下:
#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;
}