如何在C ++中可移植地获取进程id?

时间:2018-04-29 13:07:08

标签: c++ pid portability

在标准C ++中,我们可以获取当前执行线程的id:std::this_thread::get_id()。但在撰写本文时,语言并没有固有的过程概念。不过,我仍然想要我的进程ID。

那么 - 在现代C ++中获取正在运行的进程ID的最便携,标准友好(尽管不是语言标准)的方法是什么?

注意:

  • 我意识到有些机器没有进程,但是,它们也不一定都有线程......所以没有理由为什么不存在具有退化情况后备的跨平台功能。
  • 至少对于POSIX兼容的操作系统和Windows,我想要一个实际的进程ID。

2 个答案:

答案 0 :(得分:4)

  那么,那么,什么是最便携,标准友好的方式来获得正常运行的流程' (现代)C ++中的ID?

正如Igor的评论所说,没有标准的C ++方式,所以最便携,标准友好的方式是getpid

您无法找到可在更广泛的平台上使用的标准定义的任何其他内容。

答案 1 :(得分:3)

Boost.Interprocessboost::interprocess::ipcdetail::get_current_process_id

ACE library提供各种与OS相关的功能,并已移植到许多平台。有关列表,请参阅here。库的ACE_OS命名空间提供了getpid实现。

通常,没有通用的方法可以在每个平台上获取进程ID,因为操作系统进程管理的这个方面超出了C ++语言的范围。