当我编译main()并运行它时,我一直在终端中获取segmentation fault 11
。谁能帮我哪一部分出错了?下面是我的main()代码
int main(){
pid_t pid;
int shmid, status;
int *a, *b, i;
shmid = shmget(IPC_PRIVATE, 10*sizeof(int),IPC_CREAT|0666);
pid = fork();
if (pid==0){ //child
b = (int *) shmat(shmid, 0, 0);
for (i=0;i<5;i++){
printf("\t Child iterating %d time, reading b[%d] = %d.\n", i, i, b[i]);
}
shmdt(b);
}
else{ //parent
a = (int *) shmat(shmid, 0, 0);
sleep(1);
for (i=0;i<5;i++){
kill(pid, SIGSTOP);
a[i] = i;
printf("Parent iterating %d time, writing a[%d] = %d.\n", i, i, a[i]);
kill(pid, SIGCONT);
}
wait(&status);
shmdt(a);
shmctl(shmid, IPC_RMID, 0);
}
}
此外,我期望该输出如下所示。所以我使用了SIGSTOP
和SIGCONT
...我是否正确使用了它?
父级迭代0次,写入a [0] = 0
孩子迭代0次,读取b [0] = 0
父级迭代1次,写a [1] = 1
孩子迭代1次,读取b [1] = 1
父级迭代2次,写a [2] = 2
孩子迭代2次,读取b [2] = 2
父级迭代3次,写a [3] = 3
孩子迭代3次,读取b [3] = 3
父级迭代4次,写a [4] = 4
孩子迭代4次,读取b [4] = 4