【问题标题】:stop external program from c++ code [duplicate]从c ++代码停止外部程序[重复]
【发布时间】:2012-06-04 04:08:48
【问题描述】:

可能重复:
How to effectively kill a process in C++ (Win32)?


我正在创建一个必须执行一项重要任务的程序 - 它可能(很少)与用户可能无意中启动的另一个程序(比如说 a.exe)发生资源冲突。
我想做的是在执行其余工作之前杀死 a.exe(如果它正在运行)。
有什么方法可以阻止另一个程序/进程从 c++(在 Windows 下运行)运行?
我希望在美丽的提升中可能会有一些东西......
谢谢。

【问题讨论】:

    标签: c++ boost process external kill


    【解决方案1】:

    如果你确定图片名称是a.exe 那么很简单:

    system("taskkill /F /IM a.exe >nul 2>&1");
    

    【讨论】:

    • +1:执行 OP 要求的操作。值得记住的是,这将尝试杀死与 a.exe 匹配的所有进程
    • 唯一的问题是taskkill.exe 不能保证是原始的,并且可能无法按预期工作。如果您需要保证,TerminateProcess 会更好。
    • 我上一条评论中最糟糕的情况是在不知情的情况下启动与程序位于同一目录中的taskkill.exe,并可能赋予它管理员权限(或者甚至超出此范围,具体取决于程序的类型你的就是)做任何想做的事的特权。
    • 有没有办法检查进程是否仍在运行?如果我正在杀死它并且它已经死了(或没有运行),我会收到一条错误消息。
    • 我在被杀死的程序上也收到了一个错误,在我重新打开后,它没有正确关闭。
    【解决方案2】:

    假设您在 Windows 上工作。

    您可以使用 .NET 方法。我会给你链接一个帖子。 https://stackoverflow.com/a/116098/1424790

    如果您需要,我可以将帖子翻译成 C++(但我需要一些时间)。

    【讨论】:

    • 如果 C++ 中有类似于 System.Diagnostics.Proccess.GetProcessesByName 的东西,我很想知道。我想更好地定位我的进程(实际上是通过它的目标文件夹,但这可能要求太多),并且在任何程度上我都希望在进程未运行时不会出错(我捕获了所有异常,但我仍然收到错误消息)。
    【解决方案3】:

    这取决于,如果您在谈论 Windows,那么您可以使用前面提到的 taskkill,也可以使用 kernel32.dll 的 TerminateProcess 方法。

    更多信息 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms686714(v=vs.85).aspx

    如果你在 *nix 上,它就像使用 signal.h 中的 POSIX kill 方法一样简单。

    更多信息 - http://linux.die.net/man/2/kill 哎呀,请正确阅读提到 Windows 的问题

    【讨论】:

      猜你喜欢
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多