gpt4 book ai didi

windows-7 - 在 Windows 7 中,如何将 Ctrl-C 或 Ctrl-Break 发送到单独的进程

转载 作者:行者123 更新时间:2023-12-02 04:53:49 26 4
gpt4 key购买 nike

我们的团队有每天运行的长期运行流程。这些流程通常在任何一天的晚上 9 点开始,一直运行到第二天晚上 7 点。因此,它们通常每天运行 22 小时。它们由特定通用用户 ID 下服务器上的计划任务启动,并且无论该用户 ID 是否登录,它们都会启动和运行。因此,它们是无窗口控制台可执行文件。

任务编排在大型服务器场上运行的计算。通常,这些控制任务每天 22 小时不间断地运行。但是,我们经常需要停止并重新启动这些进程。因为它们控制着我们服务器场上运行的大量任务,所以干净地关闭它们很重要,这样它们才能停止并关闭所有服务器场进程。这让我想到了我们的问题。

控制进程已被编程为响应 ctrl-C 和 ctrl-break 信号。当进程在我们有权访问控制台并可以在控制台窗口中“键入”ctrl-c 或 ctrl-break 的控制台中手动启动时,这工作正常。但是,如前所述,这些进程通常作为无窗口计划任务运行。因此我们不能将任何东西“输入”到一个不存在的控制台窗口中。因为它们是在没有登录过程的情况下执行的控制台进程,所以它们也必须能够在完全无窗口的环境中执行。那么,我们如何设置进程来监听关闭信号呢?

虽然进程确实监听了 ctrl-C 和 ctrl-break 信号,但我看不出有什么办法可以将该信号发送给进程。这似乎是 Windows 中的一个基本问题,还是我错了?我知道 SendSignal.exe,但到目前为止无法让它工作。它失败如下:

>SendSignal 26320
Sending signal to process 26320...
CreateRemoteThread failed with 0x00000005.
StartRemoteThread failed with 0x00000005.
0x00000005 == Access is denied.

在没有 -F 的情况下尝试“taskkill”会导致:

>taskkill /PID 24840
ERROR: The process with PID 24840 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).

所有其他“终止”函数会立即终止进程而不是发送信号。

一种可能的解决方案是基于文件监视的解决方案:为特定文件的某些修改创建一个监视。但这是一种 hack,我们更愿意通过适当的信号来做到这一点。有人解决了这个问题吗?它似乎是一个非常基本的功能,在 Unix 环境中实现它当然是微不足道的。 Microsoft 肯定提供了一些机制来允许干净地关闭无窗口可执行文件吗?

我知道下面的线程,它的问题实际上是相同的(除了说明为什么答案是必要的,即为什么需要能够为无窗口、无控制台的进程执行此操作),但是对于“使用 SendSignal”没有答案,正如我所说,这对我们不起作用:

Can I send a ctrl-C (SIGINT) to an application on Windows?

还有其他类似的问题,但目前还没有答案。

感谢任何帮助。

最佳答案

[将@Anon 的评论升级为可见性答案]

windows-kill完美地工作并设法解决了 SendSignal 面临的拒绝访问问题。当然,特权用户也必须运行它。

windows-kill 还支持 ctrl-c 和 ctrl-break 信号。

关于windows-7 - 在 Windows 7 中,如何将 Ctrl-C 或 Ctrl-Break 发送到单独的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com