【问题标题】:How to check if a process or thread is alive or not given their IDs in C++?如何检查进程或线程是否处于活动状态或未在 C++ 中给出其 ID?
【发布时间】:2011-11-10 17:37:20
【问题描述】:

给定一个进程或线程 ID,如何编写一个 C++ 函数来检查它是否处于活动状态。我想在 Windows 和 Linux 上实现它。

【问题讨论】:

  • 您需要准确定义什么是“活着”(杀死?暂停?从未存在过?)
  • @JosephH 我的意思是进程已终止。
  • 请注意,这样做有点冒险......进程ID#x终止的可能性很小,然后进程ID被操作系统重新使用并分发给不同的过程。出于这个原因,操作系统通常会尽量避免使用进程 ID 编号,但最终这些编号确实会换行,并且您冒着认为“您的进程”正在运行的风险,而实际上它是其他一些不相关的进程。

标签: c++ multithreading process cross-platform


【解决方案1】:

如果您不愿意为您的项目添加额外的库依赖项,您可以使用预处理器指令(例如:#ifdef _WIN32)包装系统特定的代码。

窗口

如果 GetExitCode* 函数成功并且进程或线程仍然存在,则返回 STILL_ACTIVE

Linux

  • kill - 发送空信号 (0) 以检查 pid 是否仍然有效。

【讨论】:

    【解决方案2】:

    您必须首先决定是检查进程还是线程。这两者具有非常不同的语义。对于进程,请尝试非官方的Boost.Process。对于线程,Boost.Threads

    【讨论】:

      【解决方案3】:

      判断进程 ID 或线程 ID 是否处于活动状态是两个不同的问题。

      线程 ID 更容易 - 它们是进程的一部分 - 因此进程应该知道它已经创建了它们并且可以检查它们是否是最新的。

      进程 ID 是一个不同的问题 - 在前一个 onw 以相同 ID 死亡后,可以创建一个新进程。

      如果您有一系列合作流程,则一个很好的解决方案是。您可以命名它们并改用名称或共享内存。我推荐后者。

      【讨论】:

      • 我认为 OP 也想从其他进程中查询线程。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多