我正在尝试编写一个例程,该例程将从给定的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;
}
答案 0 :(得分:0)
boost::process::child
并不是真的要这样做。它将仅将传递的pid视为子进程,因此您可以执行诸如加入,查看其是否仍在运行,终止,检查返回值等操作。当然,如果需要,则需要正确的访问权限。想做那些手术。
您可以获得本机句柄(使用child::native_handle()
),但这只是在构造它时已经提供的pid,因此您将回到平方。
那么,简单的答案是“否”。您无法使用boost::process::child
来做到这一点。