首页 > 解决方案 > Windows上的子进程问题

问题描述

我在 Windows 上遇到了一个非常奇怪的问题,我需要有关根本原因的指针以进一步调试它。

语言为 C/C++,涉及的 API 为 CreateProcess。

我有一个启动“子”进程的“父”进程。我无法控制的子进程将使用 pthread 通过 TCP 套接字连接到父进程。孩子还链接了一些外部专有库,这似乎是该问题的触发因素。

在给定的时间,套接字关闭并且线程优雅地终止。子进程此时并没有结束,而是循环回来并可以根据请求再次连接。

这两个进程都是命令行进程,它们根本不创建窗口,只是普通的黑色控制台窗口。

我开发了“父”流程,所以我正在查看我在那里做错了什么!

好吧,如果孩子是从专用 cmd 手动启动的,那么一切正常。

如果子进程是从父进程启动的,则会出现问题。套接字在子端关闭,而父端看不到关闭的套接字。这会导致孩子尝试重新连接并被拒绝(由于内部逻辑,父母认为孩子仍然连接并拒绝)。

令我困惑的是,如果直接从控制台运行 child,一切正常。但是,如果子进程由父进程内部的 CreateProcess 运行,那么一切都会崩溃。

为了解决这个问题,我应该对父母进行什么检查?

标签: windowscreateprocess

解决方案


推荐阅读