C++ 暂停外部程序

Posted

技术标签:

【中文标题】C++ 暂停外部程序【英文标题】:C++ Pause External Program 【发布时间】:2014-11-19 21:47:19 【问题描述】:

是否可以通过任何方式强制暂时暂停外部程序的执行?或者具有类似效果的东西。

我见过这个,这是我的华硕笔记本电脑曾经附带的第 3 方软件,但我很想知道他们是如何管理它的。

【问题讨论】:

什么操作系统?本质上在 C++ 中无法做到这一点,这取决于您可用的 API。通常尝试暂停另一个进程是一个坏主意,您的选择是重新确定优先级或完全终止它。如果这个其他进程有某种方式表明它应该停止做它正在做的事情,那将是另一种方法。 Windows,但是他们可能有一个驱动程序或其他东西可以让他们访问这些。但我还是很好奇。 您需要支持哪些 Windows 版本?如果进程在停止时变得“无响应”,可以吗?通常这种事情被认为有点虐待,程序员不会设计他们的程序被别人劫持,所以你可能会得到意想不到的行为。 您可能可以使用任何平台的操作系统工具来执行此操作。但这可能更像是一种 hack,而不是有意放入 API 中的东西。 使用 0 调用 SetProcessAffinityMask 作为掩码。 【参考方案1】:

您可以发送信号进行处理。根据您的操作系统,它们的含义不同。捕获信号的程序可以终止、休眠或继续。

这是关于信号的手册:http://www.cs.cf.ac.uk/Dave/C/node24.html

简而言之:

使用 kill (不要害怕,这些函数只是被称为 kill 并且不会自行终止任何东西)向已知进程 id 发送信号。您可以在终端中使用 ps aux 在 linux 中获取进程 ID。这个 Linux 信号看起来很有希望:

SIGCONT 19 /* continue a stopped process */

int kill(int pid, int signal) 
向进程 pid 发送信号的系统调用。如果 pid 大于零,则将信号发送到进程 ID 等于 pid 的进程。如果 pid 为 0,则将信号发送到除系统进程之外的所有进程。

我对 Windows 信号代码知之甚少,但它的工作原理应该类似。不知道他们处理的信号代码是否与 Linux 不同。

还有:signal (int number, functionPointer) 调用一个函数,如果你的程序得到一个特定的信号。

【讨论】:

【参考方案2】:

我不知道暴力破解,但你可以在程序中设置一个调试中断,然后暂停它。

【讨论】:

运行调试版本只是为了做到这一点非常浪费。 为什么需要运行调试构建来在程序中设置断点? 是的,将调试器附加到外部程序就可以了。另一种解决方案可能是在编写 minidump 时暂停应用程序中的所有线程,例如 ProcessExplorer/ProcDump 正在执行的操作。 除非你有一个调试版本,否则你打算把断点放在哪里?只是一些随机的指导并希望最好?

以上是关于C++ 暂停外部程序的主要内容,如果未能解决你的问题,请参考以下文章

C++ 程序中的暂停控制台

如何在Windows下暂停和恢复任何外部进程?

C++:如何在visual studio控制台应用程序中使用windows media player播放和暂停mp3文件?

在 Python 中暂停执行

从外部 c++ 程序获取结果

C++:如何检查外部程序是不是正在运行?