使用boost从pid获取“二进制文件” /“可执行文件”的路径?

时间:2019-06-06 12:42:45

标签: c++ boost boost-process

我正在尝试编写一个例程,该例程将从给定的PID路径返回到其二进制文件或可执行文件,具体取决于平台。我知道可以使用windows.h在Windows上完成此操作,但这是依赖于平台的解决方案。

我试图使用Qt找到解决方案,但是我没有达到目标,因为无法使用提供的PID构造QProcess或任何其他类。

但是boost(v1.66)有一个boost :: process :: child类,可以使用提供的PID构造它,甚至可以返回本地句柄(boost :: process :: child :: native_handle_t)。但是从那里我不知道。

它没有任何方法(这并不奇怪,因为它似乎是void *的别名),但是我也找不到任何方法可以从该“类”中提取任何信息。

因此,有一种方法可以使用boost来从给定的PID中提取有关二进制位置的信息,或者没有?

功能草案:

boost::filesystem::path GetExecutable (boost::process::pid_t pid) {
   boost::filesystem::path path_to_executable;

   bp::child process (pid);
   boost::process::child::native_handle_t handle = process.native_handle();
      .
      .
      .
   return path_to_executable;
}

1 个答案:

答案 0 :(得分:0)

boost::process::child并不是真的要这样做。它将仅将传递的pid视为子进程,因此您可以执行诸如加入,查看其是否仍在运行,终止,检查返回值等操作。当然,如果需要,则需要正确的访问权限。想做那些手术。

您可以获得本机句柄(使用child::native_handle()),但这只是在构造它时已经提供的pid,因此您将回到平方。

那么,简单的答案是“否”。您无法使用boost::process::child来做到这一点。