我想为Rust程序中的线程提供单独的名称。这些名称应出现在top
/ htop
中,以便我可以区分线程的工作。在Ruby中,我会修改argv[0]
条目,或者Process.setproctitle("foo")
。我的灵感来自Ruby的Unicorn web server。
env::args
函数返回Args
值。 Args
值包含特定于平台的std::sys::args::args()
函数,该函数不会重新导出以供一般使用。 ArgsOs
没有可用的mutator(所以是的,stdlib明确表示它是不可变的)。
如何以其他方式改变参数?我很满意只有Linux的解决方案,因为这是真正的工作将要发生的地方。 stdlib之外的解决方案也很好。
为了修改流程环境中的第一个参数,我应该采取什么样的路径?
答案 0 :(得分:15)
如何替换
中的条目std::env:args()
你做不到。不可改变意味着不可改变。
我想更改我的Rust程序在
中的显示方式top
/htop
标准库中没有这样的东西。据我所知,没有跨平台的解决方案,所以放在那里将是一场艰苦的斗争。
似乎有一个简单的解决方案:Change process name without changing argv[0] in Linux
如果您只关心Linux,可以使用prctl包:
prctl::set_name("new_process")
“流程名称”的各种概念和解决方案是复杂的,并使用未记录/隐藏的API:Setting process name on Mac OS X at runtime
该答案中的所有内容都可以使用适当的macOS API绑定在Rust中编写。
似乎没有这样的概念:Changing a process name in runtime
有人可以写一个横跨这些不同机制的箱子,但我不知道。
所以我可以很容易地发现我的所有线程正在做什么
正如评论中所提到的,当您创建一个帖子时,您可以give it a name。最近有些工作被放入renaming threads at run time,但这项工作停滞不前。
答案 1 :(得分:2)
我写了proctitle crate以跨平台的方式设置进程标题。在Linux上,确实确实会给当前的 thread 命名,但这是它提供的API的一个怪癖,而不是故意的选择。