【问题标题】:Sending SIGINT (Ctrl-C) to program running in Eclipse Console将 SIGINT (Ctrl-C) 发送到在 Eclipse 控制台中运行的程序
【发布时间】:2012-02-07 12:29:21
【问题描述】:

我在 Eclipse 中设置了运行配置,需要向程序发送 SIGINT (Ctrl+C)。在 SIGINT 之后运行的程序中有清理代码,因此按下 Eclipse 的“终止”按钮将不起作用(我认为它们会发送 SIGKILL)。在控制台中输入 CTRL+C 也不起作用。

如何向 Eclipse 控制台内运行的进程发送 SIGINT?

(FWIW 我正在运行一个 Twisted 守护程序,需要 Twisted 正确关闭,这只发生在 SIGINT 上)

【问题讨论】:

    标签: python eclipse twisted sigint


    【解决方案1】:

    如果您可以使用 ps 等实用程序确定进程,则可以使用 kill 向其发送 SIGINT。该程序很可能是eclipse的子进程。

    kill -s INT <pid>
    

    【讨论】:

    • 现在我使用kill -INT `pgrep python`,所以我不必费力寻找 pid,但即使这样对于快速的代码/调试周期来说也有点麻烦。
    • 如果您不介意杀死所有 python 进程,您可以将其缩短为 pkill -INT python
    • 所以问题的关键是 kill+pgrep 或 pkill 是钝器(实际上还有其他运行的 python 进程会被破坏)。我希望有一个更细粒度的方法,通过 Eclipse 的 CTRL-C 似乎应该是可能的。
    • 我明白我并没有直接解决你的问题,但是你可以使用 pkill -f 以及更严格的匹配来确保 SIGINT 只发送到你想要的脚本。
    • Uri:嗯,SIGINT 是一个 UNIX 信号。
    【解决方案2】:

    您可以通过一行发送命令:

     kill -SIGINT $(ps aux | grep ProgrammName | grep -v grep | awk '{print $2}') 
    

    获取进程 ID,然后发送 sigint 信号

    【讨论】:

    • 短:pkill -SIGINT -f ProgrammName
    【解决方案3】:

    这似乎仍然是一个悬而未决的问题: https://bugs.eclipse.org/bugs/show_bug.cgi?id=38016

    为了完整起见:如果您来这里是为了找到一种方法来终止来自System.in 的读取行, Ctrl + Z 为我工作(在 Windows 上)。

    【讨论】:

    • 您真的在谈论 eclipse 控制台吗?对于我的 Windows 系统,我无法确认:在控制台视图中按 Ctrl + Z 时没有任何反应。
    • 也许我当时以不同的方式配置了我的运行时:bugs.eclipse.org/bugs/show_bug.cgi?id=38016#c1
    • 提到的评论谈到了 Ctrl + C 甚至那个自 2006 年以来就没有了,见 comment 11
    • 让我试着重构一下:我想当时,我需要一种方法来终止 System.in 中的读取行。这确实是一个不同的问题,通过按 Ctrl + Z (EOF) 解决了。 Bizmarck 在对 jordanm 的回答的评论中提到了这一点。对困惑感到抱歉。我相应地更新了我的答案。
    【解决方案4】:

    在某些版本中,您可以执行以下操作。

    在调试透视图中,您可以打开一个名为“信号”的视图 (窗口/显示视图/信号”或左下角图标)。

    您将获得所有支持信号的列表。右键单击并“恢复 with Signal”将为您提供所需的结果。

    【讨论】:

      【解决方案5】:

      我正在根据Artur Czajka's comment 的修改来回答。

      您可以使用pkill -SIGINT -f ProgramName。解释:pkill 类似于killall-SIGINT 说明要使用的信号,-f 使它在这种情况下工作得更好(它将查看参数和内容,而不仅仅是命令名称),并且@ 987654327@ 是 pkill 的目标。

      【讨论】:

        猜你喜欢
        • 2011-04-28
        • 1970-01-01
        • 2010-09-15
        • 2017-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-02
        相关资源
        最近更新 更多