Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 确保父进程在子进程之前终止_C_Linux_Pid - Fatal编程技术网

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

C 确保父进程在子进程之前终止,c,linux,pid,C,Linux,Pid,如果我在子对象中的fork后面使用以下行: 为了确保父进程在子进程之前终止,就像父进程终止时一样,子进程的父进程成为init进程,那么我可能会遇到什么问题(如果有的话) 这是确保子对象在父对象之后终止的好方法吗 还有什么别的办法呢?自旋循环从来都不是一件好事。叉子之前先打开一根管子。使子块处于读取状态。当父级终止时,管道将关闭,子级将继续。确保孩子关闭管道的写入端 例如:警告:忽略所有错误检查 int main( void ) { int fd[ 2 ]; pipe( fd );

如果我在子对象中的fork后面使用以下行:

为了确保父进程在子进程之前终止,就像父进程终止时一样,子进程的父进程成为init进程,那么我可能会遇到什么问题(如果有的话)

这是确保子对象在父对象之后终止的好方法吗


还有什么别的办法呢?

自旋循环从来都不是一件好事。叉子之前先打开一根管子。使子块处于读取状态。当父级终止时,管道将关闭,子级将继续。确保孩子关闭管道的写入端

例如:警告:忽略所有错误检查

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;
}

还请注意,完成后,子级应该关闭管道的读取端,但我在示例代码中没有提到这一点,因为它与等待父级终止的问题无关。

自旋循环从来都不是一件好事。为什么是我想知道的。这是对cpu周期的浪费。在用户空间代码中几乎不需要它们。我几乎从不保守地说。我的意思是绝对不会,但我有可能是错的。
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;
}