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

ein*_*ica 5 c++ portability pid

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

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

笔记:

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

Jon*_*ely 5

那么,在(现代)C++ 中获取正在运行的进程的 ID 的最便携、最符合标准的方法是什么?

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

您找不到任何其他标准定义的可用于更广泛平台的内容。

  • 我知道你问的是什么,你说“最便携,标准友好”。但这并不意味着“可移植到每个操作系统”,甚至“可移植到 Windows”。POSIX 具有广泛的可移植性,并且是一种标准。如果您的意思是“可移植到 Windows 和 POSIX,也许还有其他东西”,那么您应该这么说。 (2认同)

jsp*_*cal 5

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

ACE库提供多种操作系统相关的功能和已经被移植到多种平台。请参阅此处获取列表。该库的ACE_OS命名空间提供了getpid实现。

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