有没有办法以整数形式获取 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(使用前将#替换为@)