这是一个非常基本的问题。父进程将创建一些共享内存,在那里它将两个整数放在那里,然后它分叉一个子进入共享内存并计算它们的总和。这一切都很好,但孩子怎么告诉父母已经完成了计算金额?我是否需要在两个进程之间创建管道才能执行此操作?或者waitpid()足以实现这个目标吗?
谢谢!
答案 0 :(得分:3)
如果孩子在写完总和后退出,那么waitpid()
就足够了。否则,您需要一些IPC(互斥/信号量/管道)来表示完成。
答案 1 :(得分:0)
waitpid()
应该没问题。只需fork并在父进程中waitpid()
并在子进程计算共享内存位置,然后返回waitpid()
将解除阻塞,父进程可以使用该总和执行任何操作。
答案 2 :(得分:0)
如果在计算整数之和后不再需要子进程,则可以从main返回总和,父进程可以使用waitpid检索结果。在这种情况下,孩子会看起来像这样:
子进程:
int main(int argc, char** argv) {
int a,b;
/* read integers a and b from shared memory */
/* return sum */
return a + b;
}
如果仍需要子进程为父进程做进一步的工作,请在子进程和父进程之间设置管道,或者安排其他形式的IPC来回传递信息。