4

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

我可以看到我的一些进程有一个奇怪的命令行:

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

您知道如何为流程的每个线程执行此操作吗?这对调试非常有帮助。

/me 现在正在研究 HAL 源

4

3 回答 3

6

如果您想以可移植的方式执行此操作,并且可以跨多个 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]并显示该结果。

于 2008-09-26T14:51:36.983 回答
5

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

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

int
main(int argc, char** argv)
{
    strcpy(argv[0], "Hello, world!");
    sleep(10);
    return 0;
}
于 2008-09-26T14:39:13.173 回答
0

呸..代码不是很好,诀窍是重用环境(这里是argv_buffer)指针:

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

有更好的主意吗?

这适用于不同的线程吗?

于 2008-09-26T14:43:51.963 回答