创建进程出口时,Windows中的命名管道会发生什么情况?

创建进程出口时,Windows中的命名管道会发生什么情况?,windows,pipe,named-pipes,Windows,Pipe,Named Pipes,场景:进程使用CreateNamedPipe()创建管道,并使用ConnectNamedPipe()连接到管道,传输一些数据,然后退出(不进行清理)。烟斗能持久吗?当创建进程退出时,它的另一面(在另一个进程中使用CreateFile()打开)是否会出错 更一般地说,命名管道的生命周期是多少?如何清理陈旧的管道?管道是内核对象,在关闭其上的所有句柄之前,它们保持活动状态 如果客户端没有很好地说再见,而另一个进程仍在使用它,则很可能会出现错误\u损坏\u管道。管道是内核对象,在关闭其上的所有句柄之前

场景:进程使用
CreateNamedPipe()
创建管道,并使用
ConnectNamedPipe()
连接到管道,传输一些数据,然后退出(不进行清理)。烟斗能持久吗?当创建进程退出时,它的另一面(在另一个进程中使用
CreateFile()
打开)是否会出错


更一般地说,命名管道的生命周期是多少?如何清理陈旧的管道?

管道是内核对象,在关闭其上的所有句柄之前,它们保持活动状态


如果客户端没有很好地说再见,而另一个进程仍在使用它,则很可能会出现错误\u损坏\u管道。

管道是内核对象,在关闭其上的所有句柄之前,它们一直处于活动状态


如果客户端没有很好地说再见,而另一个进程仍在使用它,则很可能会出现错误管道。

一个重要的特殊情况:如果管道位于父进程和子进程之间,并且父进程无意中允许子进程继承这两个句柄,则不会出现错误管道,您会死锁。@HarryJohnston:在创建子项之前,如何打开父项和子项设置(两个句柄)之间的管道?如何防止孩子继承其中一个而不是另一个?这很有趣,你能发布一些示例代码吗?@AlexI:使用CreatePipe创建匿名管道的两端,你可以选择在这里使句柄可继承。使用SetHandleInformation使父端的句柄不可继承。创建子进程后,关闭子端的原始句柄。示例代码可以在一个重要的特殊情况下找到:如果管道位于父进程和子进程之间,并且父进程无意中允许子进程继承这两个句柄,那么您不会得到错误管道,您只会死锁。@HarryJohnston:如何打开父进程和子进程之间的管道设置(两个句柄)在创建子对象之前?如何防止孩子继承其中一个而不是另一个?这很有趣,你能发布一些示例代码吗?@AlexI:使用CreatePipe创建匿名管道的两端,你可以选择在这里使句柄可继承。使用SetHandleInformation使父端的句柄不可继承。创建子进程后,关闭子端的原始句柄。示例代码可在以下位置找到: