【问题标题】:Can I send SIGINT to a Python subprocess on Windows?我可以将 SIGINT 发送到 Windows 上的 Python 子进程吗?
【发布时间】:2010-11-08 21:28:28
【问题描述】:

我有一个 Python 脚本管理 Windows 上的 gdb 进程,我需要能够向生成的进程发送 SIGINT 以停止目标进程(由 gdb 管理)

Win32 中似乎只有 SIGTERM 可用,但很明显,如果我从控制台运行 gdb 并按 Ctrl+C,它会认为它正在接收 SIGINT。有没有办法可以伪造这个功能,以便在所有平台上都可以使用?

(我使用的是子进程模块,和python 2.5/2.6)

【问题讨论】:

    标签: python windows subprocess sigint signal-handling


    【解决方案1】:

    Windows 没有 unix 信号 IPC 机制。

    我会考虑向 gdb 进程发送一个 CTRL-C。

    【讨论】:

    • 根据下面的链接,不能发送CTRL+C ??
    • 我会将假密钥序列发送到 GDB 进程。有点像宏程序。这绝对不漂亮。另一种选择是使用可靠的 win32 IPC 机制来检测 gdb 进程。
    • 假密钥序列不起作用。不是 GDB 将键序列处理为中断。 shell 捕获 CTRL+C,然后将其转换为某种 IPC 事件,由 gdb 获取并解释为 SIGINT(即使我们知道 Windows 没有 SIGINT)当你说“检测 gdb 进程具有可靠的 win32 IPC 机制”,您的意思实际上是在 GDB 代码中很多地方,对吧?就像实际上去放入一个命名管道或一些标志或我可以在外部设置的东西?让我们假设在这种情况下这也不是一个选项。
    • 好的,让我试着解决这个问题。挺有趣的。因此,您有一个启动 GDB 进程的 python 进程,该进程启动它自己的目标进程。您想让 python 进程在 windows 进程中导致中断或中断。我需要知道更多。目标进程是任何 Windows 进程还是使用 Cygwin 编译的进程。这是哪个 GDB(Cygwin、自定义的等)?这将帮助我帮助您了解答案。干杯。
    • 我写的是 GDB 的前端,所以它可能是上述任何一个。我现在正在使用的 GDB(适合我的 GDB)是 codesourcery g++(codesourcery.com),它似乎是使用 MinGW 系统构建的。这个想法是允许人们使用他们喜欢的任何 GDB,比如 cygwin 二进制文件,或者 mingW 的东西,或者任何东西都在桌子上。我还通过使用 MinGW gcc 构建了一个简单的可执行文件来测试一个简单的案例,该可执行文件只打印一个计数器,直到它“接收到 SIGINT”,然后它会打印一条表明如此的消息。我得到了同样的行为。
    猜你喜欢
    • 2018-11-25
    • 2023-03-05
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2017-10-02
    相关资源
    最近更新 更多