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

xrl*_*xrl 3 std command-line-arguments rust

我想为Rust程序中的线程提供单独的名称.这些名称应该出现在top/中htop我可以区分线程的工作.在Ruby中我会修改argv[0]条目,或者也许Process.setproctitle("foo").我的灵感来自Ruby的Unicorn网络服务器.

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

我如何以其他方式改变参数?我很满意只有Linux的解决方案,因为这是真正的工作将要发生的地方.stdlib外的解决方案也很好.

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

She*_*ter 15

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

你不能.不可改变意味着不可改变.

我想改变我的Rust程序出现在top/htop

标准库中没有这样的东西.据我所知,没有跨平台解决方案,所以放在那里将是一场艰苦的斗争.

Linux的

似乎有一个足够简单的解决方案:在Linux中更改进程名称而不更改argv [0]

如果你只关心Linux,你可以使用prctl crate:

prctl::set_name("new_process")
Run Code Online (Sandbox Code Playgroud)

苹果系统

具有"进程名称"的各种概念和解决方案是复杂的并使用未记录/隐藏的API:在运行时在Mac OS X上设置进程名称

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

视窗

似乎没有这样的概念:在运行时更改进程名称

跨平台

有人可以写一个横跨这些不同机制的箱子,但我不知道一个.


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

正如评论中所提到的,当您创建一个线程时,您可以为其命名.最近在运行时将一些工作重新命名为线程,但这项工作停滞不前.