确保父进程在子进程之前终止

时间:2013-02-04 13:30:52

标签: c linux pid

如果我在fork之后在孩子中使用以下行:

while( getppid() != 1 )

确保父级在子级之前终止(如父级终止时,子进程的父级成为init进程)然后我可能面临哪些问题,如果有的话?

这是确保孩子在父母之后终止的好方法吗?

还有其他什么方式?

1 个答案:

答案 0 :(得分:0)

自旋循环永远不是一件好事。叉前打开管道。请孩子在阅读时阻止。当父级终止时,管道将关闭,子级将继续。 (确保孩子关闭管道的写入侧!)

例如:(警告:所有错误检查)

int
main( void ) {
    int fd[ 2 ];
    pipe( fd );
    if( fork() ) {
        sleep( 2 );
        puts( "parent awakes" );
    } else {
        char k;
        close( fd[ 1 ]);
        read( fd[ 0 ], &k, 1 );
        puts( "child continues" );
    }
    return 0;
}

还要注意,当孩子完成时,孩子应该关闭管道的读取端,但我已经将其从样本代码中删除了,因为它与等待父母终止的问题无关。