搞死人的管道HANDLE,搞死人的继承

测试昨天的代码的时候,又遇到了问题。把整个处理流程又加长之后,其中有一个进程的输入和输出都被重定向了。因为昨天测试的时候都是中途强行停止,现在想要正常停止,自然就是把连接自己和子进程StdInput的管道HANDLE关闭,结束送数据。但是我关掉管道输入端的HANDLE以后,子进程却还在傻傻等待数据,也不退出。

因为昨天就已经遇到过一次这样的问题,所以第一个就是检查有没有多余HANDLE。但是我都关掉了啊。最后没办法,用process explorer软件查看。方法是:启动process explorer,在view菜单选Lower Pane View,勾Handles,在下面多出的窗格的列表的标题栏右键,勾起value。然后view里面勾show unnamed handles and mappings。在vc里面下断点,记下自己用于写的HANDLE的value,到process explorer里面找,果然找到了。然后程序继续运行,到关闭handle以后,再去process explorer里面看,确实消失了啊。没道理啊,为什么会这样呢。

一边想着一边点到它的子进程里面,赫然看到value和我关掉的HANDLE一样的HANDLE在子进程里面。艹,一个不小心它被继承了。所以我关掉一个,子进程里面还有一个,没完没了orz

好吧,乖乖按照Windows SDK里面的例子,用SetHandleInformation去把自己留着用的HANDLE的继承属性去掉。再测试,可以了。

发表评论