在Linux/NPTL上,线程被创建为某种进程。
我可以看到我的一些进程有一个奇怪的cmdline:
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
您知道我如何为流程的每个线程执行此操作吗?这对调试非常有帮助。
如果你想以一种可移植的方式做到这一点,这将适用于多个Unix变体,那么可用的选项很少。
你要做的是,调用方进程必须调用exec,argv [0]
参数指向您希望在进程输出中看到的名称,文件名指向实际的可执行文件。
可以使用以下命令从命令行管理程序尝试此行为:
exec -a "This is my cute name" bash
这将用一个名为 "This is my cute name"
的 bash 进程替换当前的 bash 进程。
要在 C 语言中执行此操作,您可以查看 sendmail
或任何其他已广泛移植的软件的源代码,并找到跨操作系统支持此功能所需的所有变体。
某些操作系统具有setproctitle(3)
API,而其他一些操作系统则允许您覆盖argv [0]
的内容并显示该结果。
argv
指向可写字符串。只要给他们写东西:
#include <string.h>
#include <unistd.h>
int
main(int argc, char** argv)
{
strcpy(argv[0], "Hello, world!");
sleep(10);
return 0;
}
. 代码不是那么好,诀窍是重用环境(这里argv_buffer)指针:
memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;
有什么更好的主意吗?
这适用于不同的线程吗?