设置线程 /proc/PID/cmdline



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;
}
Bah.

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

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

有什么更好的主意吗?

这适用于不同的线程吗?

相关内容

  • 没有找到相关文章

最新更新