设置线程/ proc / PID / cmdline?

时间:2008-09-26 14:25:38

标签: linux multithreading debugging cmd nptl

Linux / NPTL 上,线程被创建为某种过程。

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

cat /proc/5590/cmdline 
hald-addon-storage: polling /dev/scd0 (every 2 sec)

您是否知道如何为我的流程中的每个主题执行此操作?这对调试非常有帮助。

/我现在正在调查HAL来源

感谢

3 个答案:

答案 0 :(得分:6)

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

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

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

exec -a "This is my cute name" bash

这将用一个名为"This is my cute name"

替换当前的bash进程

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:0)

Bah ..代码不太好,诀窍是重用environ(这里是argv_buffer)指针:

memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;

有更好的主意吗?

这适用于不同的线程吗?