如何在 C++ 中执行 os.getpid()?

Posted

技术标签:

【中文标题】如何在 C++ 中执行 os.getpid()?【英文标题】:How do I do os.getpid() in C++? 【发布时间】:2010-02-13 12:09:32 【问题描述】:

这里是新手。我正在尝试制作一个从 python 创建的命名管道读取的 c++ 程序。我的问题是,python 创建的命名管道使用 os.getpid() 作为管道名称的一部分。当我尝试从 C++ 调用管道时,我使用 getpid()。我没有从 c++ 获得相同的价值。 os.getpid 在 c++ 中是否有等效的方法?

谢谢!

编辑:

抱歉,我实际上是使用 os.getpid() 通过 ProcessIDtoSessionID() 获取会话 ID。然后我使用会话 ID 作为管道名称的一部分

【问题讨论】:

没有标准的 C++ 方式。这取决于您的操作系统或您使用的库/框架。请提供更多信息。 你认为“价值不一样”是什么意思? getpid() 返回进程 id - 每次调用它都会不同(可能)。 这不是预期的吗?由于您使用的是管道,它们最终是不同的过程,对吧? 【参考方案1】:

您不会获得相同的进程 ID,因为您的 python 程序和 c++ 程序在不同的进程中运行,因此具有不同的进程 ID。所以通常使用不同的逻辑来命名您的 fifo 文件。

【讨论】:

我明白了。谢谢。我使用 os.getpid() 作为 pywin32 的 ProcessIDtoSessionID 的参数来获取会话 ID。我会尝试使用不同的方法。再次感谢!【参考方案2】:

如果您作为单独的进程运行,您不会获得相同的值,因为每个进程都有自己的进程 ID。寻找其他方法来识别管道。

【讨论】:

【参考方案3】:

标准库不提供文件以外的任何东西。您将需要使用其他一些特定于操作系统的 API。

【讨论】:

【参考方案4】:

您无法轻松地从 C++ 程序中检索 Python 解释器的 PID。

要么为命名管道分配一个常量名称,要么如果你真的需要同一个 Python 程序的多个管道,创建一个临时文件,Python 程序将它们的 PID 写入其中(使用文件锁定!) - 然后您可以从 C++ 程序中读取 PID。

【讨论】:

以上是关于如何在 C++ 中执行 os.getpid()?的主要内容,如果未能解决你的问题,请参考以下文章

R 等效于 python 的 os.getpid() 用于并行处理

多任务编程 -- 进程相关函数 os.getpid()os.getppid()os._exit()sys.exit()

多任务编程 -- 进程相关函数 os.getpid()os.getppid()os._exit()sys.exit()

Python_多进程_pool进程池

Python3:多进程-小例子

进程中的Manager(),实现多进程的数据共享与传递