我正在开发一个执行多个进程的应用程序,这些进程同时使用多个线程.当出现故障并且线程死机时,铁 rust 输出:thread 'main' panicked at 'explicit panic'.我想将此消息用于调试目的,以便能够通过其名称识别死机进程,但在本例中,所有进程都具有‘Main’线程名称.

如何更改主线程名?

我知道我可以使用std::thread::Builder更改子线程的名称,但这不适用于当前线程.

我也try 过使用pthread_setname_np Call(我使用的是Linux系统):

use libc::{pthread_self, pthread_setname_np};
use std::{ffi::CString, thread};

fn main() {

    // Set the name of the main thread
    let name = CString::new("new_name").unwrap();
    unsafe {
        pthread_setname_np(pthread_self(), name.as_ptr());
    }

    panic!();
}

使用cargo run执行此命令时,使用main名称时仍会出现panic .

推荐答案

恐怕这是不可能的:the thread name is managed independently from the OSit is set只在标准库中的两个地方:when setting up main()when spawning a thread.没有为当前线程更改它的公共API(如果您认为这很重要,您可以要求一个).

您可以产生一个新的线程,并立即join()它.

Linux相关问答推荐

AddressSaniizer随机抛出没有任何解释的SIGSEGV

pci_user_write_config_word在哪里实现?

将十六进制文件名转换为十进制

如何更改文件的上次访问/修改/更改日期?

使用 sed 或 awk 在 linux 中将第一行中的一个单词替换为第二行中的另一个单词

如何使用换行符或制表符或空格 grep 多行字符串

如何在 Linux 上使用 Python 判断进程是否仍在运行?

为什么 fork() 在 setsid() 之前

为什么在 Linux 中使用 select

使用 C/C++ (GCC/G++) 在 Linux 中的套接字编程中发送和接收文件

什么是最有效的不区分大小写的 grep 用法?

带有 curl 的 Linux 脚本来判断 Web 服务是否已启动

./studio.sh 之后的 Android Studio 错误

如何使用 Ansible 等待服务器重启?

Docker Bash 提示不显示 colored颜色 输出

Python日志(log)记录 - 判断日志(log)文件的位置?

在 Linux 中的特定行向文件添加文本

如何从目录复制内容而不是符号链接?

如何在 sed 中指定非捕获组?

如何在没有 root 用户的情况下在 Linux (CentOS) 中安装软件包并进行自动依赖处理?