有没有办法将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相关的内容。
答案 0 :(得分:7)
我不认为ThreadId
甚至跟踪这个。 implementation of ThreadId
只有一个64位计数器,随着每个线程的增加而增加;它似乎没有对底层线程系统做任何事情。
如果您有JoinHandle
,则可以从底层线程系统获取ID。完成后,您可以调用相应的线程系统函数来获取其ID,可能操作系统的ID
在Linux上,您可以通过JoinHandleExt::as_pthread_t
获取pthread_t句柄。您可能会在其他没有pthreads的平台上获得等效的文件。
请注意
pthread_self()
返回的线程ID与调用gettid(2)
返回的内核线程ID不同。
这在Rust 1.26中稳定为process::id
。