繁体   English   中英

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

[英]How to obtain the process id portably in C++?

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

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

笔记:

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

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

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

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

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

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

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

getpid()函数应该可移植到Windows和Linux(已通过vs2017测试)

在这里查看帮助:

https://pubs.opengroup.org/onlinepubs/9699919799/functions/getpid.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM