我想为我的 Rust 程序中的线程提供单独的名称。这些名称应该出现在 top
/htop
中,这样我就可以区分线程的工作。在 Ruby 中,我会修改 argv[0]
条目,或者可能修改 Process.setproctitle("foo")
。我的灵感来自于 Ruby 的 Unicorn web server .
env::args
函数返回一个 Args
值。 Args
值包装特定于平台的 std::sys::args::args()
函数,该函数不会重新导出以供一般使用。 ArgsOs
没有可用的修改器(所以是的,stdlib 明确表示它是不可变的)。
如何以其他方式改变参数?我对仅 Linux 的解决方案感到满意,因为真正的工作将在这里进行。 stdlib 之外的解决方案也很好。
为了修改进程环境中的第一个参数,我应该采取什么路径?
最佳答案
How can I replace an entry in
std::env:args()
你不能。 Immutable 表示不可变。
I would like to change how my Rust program appears in
top
/htop
标准库中没有这样的东西。据我所知,目前还没有跨平台的解决方案,所以要加入其中将是一场艰苦的战斗。
Linux
似乎有一个足够简单的解决方案:Change process name without changing argv[0] in Linux
如果你只关心 Linux,你可以使用 prctl crate :
prctl::set_name("new_process")
苹果操作系统
具有“进程名称”的各种概念,解决方案很复杂并使用未记录/隐藏的 API:Setting process name on Mac OS X at runtime
该答案中的所有内容都可以使用与 macOS API 的适当绑定(bind)用 Rust 编写。
window
好像没有这个概念:Changing a process name in runtime
跨平台
有人可以写一个 crate 来抽象这些不同的机制,但我不知道有一个。
so I can easily spot what all my threads are doing
如评论中所述,创建线程时,可以give it a name .一些工作最近投入了renaming threads at run time ,但这项工作停滞不前。
关于rust - 如何替换 std::env:args() 中的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48193529/