Rust 如何替换std::env:args()中的条目?

Rust 如何替换std::env:args()中的条目?,rust,command-line-arguments,std,Rust,Command Line Arguments,Std,我想为我的Rust程序中的线程提供单独的名称。这些名称应该出现在top/htop中,这样我就可以区分线程的作业。在Ruby中,我会修改argv[0]条目,或者可能修改Process.setproctitle(“foo”)。我的灵感来自Ruby的 env::args函数返回一个args值。Args值包装了特定于平台的std::sys::Args::Args()函数,该函数不会重新导出以供一般使用。没有可用的突变子(所以是的,stdlib明确表示它是不可变的) 我如何以其他方式改变论点?我很高兴有一

我想为我的Rust程序中的线程提供单独的名称。这些名称应该出现在
top
/
htop
中,这样我就可以区分线程的作业。在Ruby中,我会修改
argv[0]
条目,或者可能修改
Process.setproctitle(“foo”)
。我的灵感来自Ruby的

env::args
函数返回一个
args
值。
Args
值包装了特定于平台的
std::sys::Args::Args()
函数,该函数不会重新导出以供一般使用。没有可用的突变子(所以是的,stdlib明确表示它是不可变的)

我如何以其他方式改变论点?我很高兴有一个Linux专用的解决方案,因为这是真正的工作将发生的地方。stdlib之外的解决方案也不错

我应该采取什么路径来修改流程环境中的第一个参数

如何替换
std::env:args()中的条目

你不能。不可变的意思是不可变的

我想更改我的Rust程序在
top
/
htop

标准库中没有类似的内容。据我所知,目前还没有跨平台的解决方案,因此要投入其中将是一场艰苦的战斗

Linux 似乎有一个足够简单的解决方案:

如果您只关心Linux,您可以使用板条箱:

马科斯 具有各种“流程名称”的概念,解决方案比较复杂,并且使用未记录/隐藏的API:

答案中的所有内容都可以使用macOS API的适当绑定以Rust编写

窗户 似乎没有这样的概念:

跨平台 有人可以写一个板条箱来抽象这些不同的机制,但我不知道


所以我可以很容易地发现我所有的线程都在做什么


如注释中所述,当您创建线程时,您可以。最近投入了一些工作,但这项工作停滞不前。

我编写了以跨平台方式设置流程标题的方法。在Linux上,它确实碰巧命名了当前线程,但这是它提供的API的一个怪癖,而不是故意选择的。

我的Rust程序是如何出现的。。。我所有的线程都在做什么-它是哪一个?您关心整个程序还是特定的线程?在Ruby中,我会修改
argv[0]
条目-您的意思是
argv
?我不知道这会改变过程之外的任何事情。搜索此功能似乎很困难,您是否有任何链接,以便我可以了解更多有关Ruby功能的信息?(刚刚意识到我的链接是错误的),线程不是进程,为什么不在构建线程时使用名称?对答案的赞誉
prctl::set_name("new_process")