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

2024-05-20

有没有办法以整数形式获取 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相关的任何内容。


线程编号

我不这么认为ThreadId甚至跟踪这个。这实施ThreadId https://github.com/rust-lang/rust/blob/1.21.0/src/libstd/thread/mod.rs#L875-L899仅具有一个 64 位计数器,该计数器随每个线程而增加;它似乎没有对底层线程系统做任何事情。

如果您有JoinHandle https://doc.rust-lang.org/std/thread/struct.JoinHandle.html,可以从底层线程系统获取ID。一旦你有了这个,你就可以调用适当的线程系统函数来获取它的ID和潜在地操作系统 ID

在 Linux 上,您可以通过以下方式获取 pthread_t 句柄JoinHandleExt::as_pthread_t https://doc.rust-lang.org/std/os/unix/thread/trait.JoinHandleExt.html#tymethod.as_pthread_t。您可能可以在 pthreads 不可用的其他平台上获得等效的版本。

注意

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

pthread_self manpage https://linux.die.net/man/3/pthread_self

进程号

这在 Rust 1.26 中稳定为process::id https://doc.rust-lang.org/std/process/fn.id.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取当前线程 id 和进程 id 作为整数? 的相关文章

随机推荐