如何替换 std::env:args() 中的条目?
How can I replace an entry in std::env:args()?
我想为我的 Rust 程序中的线程提供单独的名称。这些名称应该出现在 top
/htop
中,这样我就可以区分线程的工作。在 Ruby 中,我会修改 argv[0]
条目,或者可能 Process.setproctitle("foo")
。我的灵感来自 Ruby 的 Unicorn web server.
env::args
函数returns一个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")
macOS
具有 "process name" 的各种概念,解决方案很复杂并使用未记录/隐藏的 API:Setting process name on Mac OS X at runtime
该答案中的所有内容都可以使用与 macOS API 的适当绑定用 Rust 编写。
Windows
好像没有这个概念:Changing a process name in runtime
跨平台
有人可以写一个 crate 来抽象这些不同的机制,但我不知道有一个。
so I can easily spot what all my threads are doing
如评论中所述,当您创建线程时,您可以 give it a name. Some work was recently put into renaming threads at run time,但该工作停滞了。
我写了 proctitle crate 以 cross-platform 的方式设置流程标题。在 Linux 上,它确实碰巧命名了当前的 线程 ,但这是它提供的 API 的一个怪癖,而不是有意选择。
我想为我的 Rust 程序中的线程提供单独的名称。这些名称应该出现在 top
/htop
中,这样我就可以区分线程的工作。在 Ruby 中,我会修改 argv[0]
条目,或者可能 Process.setproctitle("foo")
。我的灵感来自 Ruby 的 Unicorn web server.
env::args
函数returns一个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")
macOS
具有 "process name" 的各种概念,解决方案很复杂并使用未记录/隐藏的 API:Setting process name on Mac OS X at runtime
该答案中的所有内容都可以使用与 macOS API 的适当绑定用 Rust 编写。
Windows
好像没有这个概念:Changing a process name in runtime
跨平台
有人可以写一个 crate 来抽象这些不同的机制,但我不知道有一个。
so I can easily spot what all my threads are doing
如评论中所述,当您创建线程时,您可以 give it a name. Some work was recently put into renaming threads at run time,但该工作停滞了。
我写了 proctitle crate 以 cross-platform 的方式设置流程标题。在 Linux 上,它确实碰巧命名了当前的 线程 ,但这是它提供的 API 的一个怪癖,而不是有意选择。