我想为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外的解决方案也很好。
我应该采取什么样的路径来修改流程环境中的第一个参数?
如何替换
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,但这项工作停滞不前。
我写了proctitle crate以跨平台的方式设置流程标题。在Linux上,确实命名当前线程,但这是它提供的API的一个怪癖而不是故意的选择。