挂起一个进程

3

有没有一种(比较简单的)方法可以强制使Windows应用程序挂起,不回应?还是这完全取决于具体的应用程序/进程?

编辑:我想尝试的是:所涉及的应用程序有一个Web GUI和几个后台运行的进程。有一个报告说,当其中一个进程崩溃时,Web GUI停止回应。我想尝试重现这个问题,但我意识到这可能并不容易。


1
你的意思是要强制另一个应用程序挂起吗?也就是说,你想打开Notepad.exe并从你的应用程序中使它崩溃? - djdd87
6个回答

4
如果你可以获取应用程序中的线程句柄,你可以尝试调用SuspendThread()来使该线程停止运行。请注意,我的回答假设你想让另一个应用程序挂起。有很多方法可以让你自己的应用程序挂起(无论是故意还是非故意),但这里不再解释。
针对你的编辑,我记得Process Explorer有能力手动挂起特定进程内的线程。这绝对值得一试。

1
Windows Sysinternals 工具 Process Explorer 具有挂起整个进程和挂起单个线程的能力。我已经使用 Process Explorer v16.05 确认了这两个功能。我发现这对于模拟问题描述中所述的故障非常有用。
这会按原样适用于任何可执行文件,但是取决于进程运行的帐户,您可能需要管理员特权才能挂起进程或线程。

1

这取决于您所说的“挂起”和“无响应”的含义。任何停止处理消息的GUI应用程序都将对用户而言变得无响应。


如果您只需要停止GUI消息,则可以使用钩子来实现。 - Umair Ahmed

0

while (true) {}


仅仅是一个应用程序,而不是整个操作系统。 - Geo
@Geo 在一个进程中使用 while (true) {} 不会挂起整个操作系统,至少在 Windows Vista 上不会。 - Daniel Daranas
当我回复时,没有提到正在运行的进程。正如丹尼尔已经说过的那样,除非我们谈论16位Windows或其他非多任务操作系统,否则这不会挂起操作系统。 - KristoferA

0

一种简单的方法是将您想要挂起的应用程序的优先级设置为最低,然后在低优先级下无限循环运行您的应用程序。这将使其他应用程序饥饿。虽然不完美但简单易行。


0

如果您可以更改该进程的代码,只需在其中插入for(;;);即可。如果您无法更改代码,则最简单的暂停进程的方法是使用“Process Explorer”。只需右键单击所需的进程,然后在菜单中选择“暂停”。


谢谢 - 进程资源管理器很有用,看起来它解决了问题。 - undefined

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