【问题标题】:Get the current thread id and process id as integers?以整数形式获取当前线程 ID 和进程 ID?
【发布时间】:2017-11-02 12:35:51
【问题描述】:

有没有办法将 Rust 中的当前进程 id 和线程 id 获取为整数?

我得到的最接近的是::std::thread::current().id(),它返回一个不透明的ThreadId 对象。当尝试访问其u64 字段时,我得到:

error[E0611]: field `0` of tuple-struct `std::thread::ThreadId` is private
 --> src\main.rs:4:13
  |
4 |     let x: u64 = ::std::thread::current().id().0;
  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我在标准库中找不到与进程 ID 相关的任何内容。

【问题讨论】:

    标签: rust


    【解决方案1】:

    线程编号

    我认为ThreadId 甚至不会跟踪这个。 implementation of ThreadId 只有一个 64 位计数器,随着每个线程的增加而增加;它似乎没有对底层线程系统做任何事情。

    如果你有JoinHandle,你可以从底层线程系统获取ID。一旦你有了它,你就可以调用适当的线程系统函数来获取它的 ID 和可能操作系统的 ID

    在 Linux 上,您可以通过 JoinHandleExt::as_pthread_t 获取 pthread_t 句柄。在 pthreads 不可用的其他平台上,您可能会获得等价物。

    注意

    pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同。

    pthread_self manpage

    进程号

    这在 Rust 1.26 中稳定为 process::id。

    【讨论】:

    • docs 还特别指出 "ThreadIds 不能保证对应于线程的系统指定标识符"。
    猜你喜欢
    • 2010-12-25
    • 2013-06-24
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多