在Linux/NPTL上,线程被创建为某种进程。
我可以看到我的一些进程有一个奇怪的命令行:
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
您知道如何为流程的每个线程执行此操作吗?这对调试非常有帮助。
/me 现在正在研究 HAL 源
在Linux/NPTL上,线程被创建为某种进程。
我可以看到我的一些进程有一个奇怪的命令行:
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
您知道如何为流程的每个线程执行此操作吗?这对调试非常有帮助。
/me 现在正在研究 HAL 源
如果您想以可移植的方式执行此操作,并且可以跨多个 Unix 变体工作,那么可用的选项很少。
你要做的是你的调用者进程必须调用 exec ,argv [0]
参数指向你想在进程输出中看到的名称,文件名指向实际的可执行文件。
您可以使用以下命令从 shell 尝试此行为:
exec -a "This is my cute name" bash
这将用一个名为"This is my cute name"
.
为了在 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;
有更好的主意吗?
这适用于不同的线程吗?