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

Ale*_*x I 1 windows pipe named-pipes

场景:进程创建管道并与之CreateNamedPipe()连接ConnectNamedPipe(),传输一些数据,然后退出(没有清理).管道是否仍然存在?它的另一面(在不同的进程中打开)是否在CreateFile()创建过程退出时出错?

更一般地说,命名管道的寿命是多少?如何清理过时的管道?

Han*_*ant 6

管道是内核对象,它们保持活动状态直到它们上的所有句柄都关闭.

如果客户端没有很好地说再见而另一个进程仍在继续使用它,您很可能会得到ERROR_BROKEN_PIPE.

  • 一个重要的特殊情况:如果管道位于父进程和子进程之间,并且父进程无意中允许子进程继承*两个*句柄,那么你将不会得到ERROR_BROKEN_PIPE,你只会死锁. (2认同)
  • @AlexI:使用CreatePipe创建匿名管道的两端,您可以选择在此处使句柄可继承。使用 SetHandleInformation 使父端的句柄不可继承。创建子进程后,关闭子进程的原始句柄。示例代码可以在 http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499%28v=vs.85%29.aspx 找到 (2认同)