设置线程/ proc/PID/cmdline?

elm*_*rco 3 linux debugging multithreading cmd nptl

Linux/NPTL上,线程被创建为某种进程.

我可以看到我的一些进程有一个奇怪的cmdline:

cat /proc/5590/cmdline 
hald-addon-storage: polling /dev/scd0 (every 2 sec)
Run Code Online (Sandbox Code Playgroud)

你知道如何为我的进程的每个线程做到这一点吗?这对调试非常有帮助.

/我现在正在调查HAL来源

谢谢

mig*_*aza 6

如果你想以可移植的方式做到这一点,那么可以在多个Unix变体中使用的东西,可用的选项很少.

您需要做的是调用者进程必须使用argv [0]指向您希望在进程输出中看到的名称的参数调用exec ,并指向指向实际可执行文件的文件名.

您可以使用以下命令从shell尝试此行为:

exec -a "This is my cute name" bash
Run Code Online (Sandbox Code Playgroud)

这将用一个命名的替换当前的bash进程"This is my cute name".

要在C中执行此操作,您可以查看sendmail已广泛移植的源代码或任何其他软件,并查找跨操作系统所需的所有变体以支持此功能.

某些操作系统具有setproctitle(3)API,其他一些操作系统允许您覆盖内容argv [0]并显示结果.


Chr*_*ung 5

argv指向可写字符串。给他们写点东西:

#include <string.h>
#include <unistd.h>

int
main(int argc, char** argv)
{
    strcpy(argv[0], "Hello, world!");
    sleep(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)