获取当前线程ID和进程ID为整数?

时间:2017-11-02 12:35:52

标签: rust

有没有办法将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相关的内容。

1 个答案:

答案 0 :(得分:7)

线程ID

我不认为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

进程ID

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