0

我正在尝试编写一个从给定 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;
}
4

1 回答 1

0

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

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

那么,简单的答案是“不”。您不能使用boost::process::child.

于 2019-06-06T13:30:06.860 回答