如何通知父进程我已完成

时间:2013-01-21 21:24:24

标签: c linux

这是一个非常基本的问题。父进程将创建一些共享内存,在那里它将两个整数放在那里,然后它分叉一个子进入共享内存并计算它们的总和。这一切都很好,但孩子怎么告诉父母已经完成了计算金额?我是否需要在两个进程之间创建管道才能执行此操作?或者waitpid()足以实现这个目标吗?

谢谢!

3 个答案:

答案 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来回传递信息。