Как получить идентификатор процесса переносимо в C ++? - PullRequest
0 голосов
/ 29 апреля 2018

В стандартном C ++ мы можем получить идентификатор для текущего потока выполнения: std::this_thread::get_id(). Но на момент написания в языке нет понятия процесса. Я все еще хочу свой идентификатор процесса, хотя.

Итак, какой самый переносимый, дружественный к стандартам (хотя и не стандартный для языка) способ получения идентификатора запущенного процесса в современном C ++?

Примечания:

  • Я понимаю, что на некоторых машинах нет процессов, но они также не обязательно имеют потоки ... поэтому нет причины, по которой не должно существовать кроссплатформенной функции с запасным вариантом для вырожденных случаев.
  • Мне понадобится фактический идентификатор процесса, по крайней мере, для POSIX-совместимых операционных систем и Windows.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Boost.Interprocess имеет boost :: interprocess :: ipcdetail :: get_current_process_id .

Библиотека ACE предоставляет различные функции, связанные с ОС, и была портирована на многие платформы. Смотрите здесь для списка. Пространство имен ACE_OS библиотеки обеспечивает реализацию getpid .

В общем, универсального способа получения идентификатора процесса на каждой платформе не существует, поскольку этот аспект управления процессами в ОС выходит за рамки языка C ++.

0 голосов
/ 29 апреля 2018

Итак, каков наиболее переносимый, стандартизированный способ получения идентификатора запущенного процесса в (современном) C ++?

Как говорится в комментарии Игоря, стандартного C ++ способа не существует, поэтому наиболее переносимым и стандартизированным способом является getpid.

Вы не найдете ничего другого, определенного стандартом, которое может использоваться на более широком наборе платформ.

...