2008-09-26 20 views
3

On Linux/NPTL,线程被创建为某种进程。设置线程/ proc/PID/cmdline?

我可以看到我的一些过程有一个奇怪的CMDLINE:

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

你有一个想法,我怎么能做到这一点对我的过程中的每个线程?这对调试非常有帮助。

/我现在调查HAL源

感谢

回答

6

如果你想以便携的方式做到这一点,这些东西可以在多种Unix版本中使用,那么可用选项很少。

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

您可以通过使用试着从外壳此行为:

exec -a "This is my cute name" bash 

这将替换一个名为"This is my cute name"当前bash进程。

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

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

4

argv点,可写的字符串。只要写东西,对他们说:

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

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

相当难看,但我会用它,我猜 – elmarco 2008-09-26 14:44:50

+0

这可能是一个缓冲区溢出。特别是如果你的新字符串比原来的长。你可能会更好地在堆上分配一个新字符串,并将其分配给argv [0] – 2008-09-27 17:27:55

0

呸..该代码是不是很好,关键是要重复使用ENVIRON(这里argv_buffer)指针:

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

任何更好的主意吗?

这是适用于不同的线程吗?