linux 正在设置线程/proc/PID/cmdline?

p3rjfoxz  于 2023-01-25  发布在  Linux
关注(0)|答案(3)|浏览(188)

Linux/NPTL上,线程作为某种进程创建。
我可以看到我的一些进程有一个奇怪的命令行:

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

你知道我如何为进程中的每个线程都这样做吗?这对调试很有帮助。

qxgroojn

qxgroojn1#

如果你想以一种可移植的方式来完成这件事,这将在多个Unix变体上工作,有很少的选项可用。
您需要做的是,您的调用者进程必须使用argv [0]参数调用exec,该参数指向您希望在进程输出中看到的名称,而文件名指向实际的可执行文件。
您可以使用以下命令从shell尝试此行为:

exec -a "This is my cute name" bash

这将用一个名为"This is my cute name"的bash进程替换当前的bash进程。
要在C中实现这一点,您可以查看sendmail或任何其他已广泛移植的软件的源代码,并找到跨操作系统支持这一点所需的所有变体。
有些操作系统有setproctitle(3) API,有些操作系统允许覆盖argv [0]的内容并显示结果。

92vpleto

92vpleto2#

argv指向可写字符串。只需向其写入内容:

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

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

l7wslrjt3#

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

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

有更好的主意吗?
这对不同的线程有效吗?

相关问题