我能否在Windows上向Python子进程发送SIGINT信号?

5
我有一个Python脚本在Windows上管理gdb进程,我需要能够发送SIGINT到生成的进程以停止目标进程(由gdb管理)
似乎在Win32中只有SIGTERM可用,但是如果我从控制台运行gdb并按Ctrl + C,它会认为它正在接收SIGINT。是否有一种方法可以伪造这个功能,使其在所有平台上都可用?
(我正在使用subprocess模块和python 2.5 / 2.6)
1个回答

1

Windows没有Unix信号IPC机制。

我会尝试向gdb进程发送CTRL-C。


根据下面的链接,你不能发送CTRL+C吗? - Ryan
我会向GDB进程发送伪造的密钥序列,类似于宏程序。这绝对不太好看。另一种选择是使用可靠的win32 IPC机制来检测GDB进程。 - drudru
虚假的按键序列不起作用。GDB并不会将按键序列转换为中断。Shell捕获CTRL+C,然后将其转换为某种IPC事件,由gdb接收并解释为SIGINT(尽管我们所知道的Windows没有SIGINT)。当你说“使用可靠的win32 IPC机制对gdb进程进行仪器化”时,你是指实际上在GDB代码中进行修改,对吗?就像实际上去添加一个命名管道或一些标志,我可以在外部设置?让我们假设在这种情况下也不是一个选项。 - Ryan
好的,让我试着理清楚这个问题。这很有趣。所以你有一个启动GDB进程的Python进程,该GDB进程又启动了自己的目标进程。你想让Python进程在Windows进程中引发中断或打断。我需要知道更多信息。目标进程是任何Windows进程还是使用Cygwin编译的进程?这是哪个GDB(Cygwin、自定义的等)?这将帮助我帮助你找到答案。干杯。 - drudru
我正在编写一个 GDB 的前端,所以它可能是上述任何一种。我现在使用的 GDB(让我感到困扰的那个)是 CodeSourcery G++,(http://www.codesourcery.com/),它似乎是使用 MinGW 系统构建的。想法是允许人们使用任何他们喜欢的 GDB,因此 cygwin 二进制文件、mingW 或其他任何东西都可以考虑。我还通过使用 MinGW gcc 构建了一个简单的可执行文件来测试一个简单的案例,该可执行文件仅打印计数器,直到“接收 SIGINT”时,它会打印一个指示消息。我得到了同样的行为。 - Ryan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接