设置线程/ proc / PID / cmdline吗?

时间:2020-03-06 14:47:15  来源:igfitidea点击:

在Linux / NPTL上,线程是作为某种过程创建的。

我可以看到我的某些过程中有一个奇怪的cmdline:

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

我们是否知道如何对流程的每个线程执行此操作?这对于调试非常有帮助。

/ me现在正在调查HAL来源

谢谢

解决方案

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

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

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

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

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

有更好的主意吗?

这适用于不同的线程吗?

如果我们想以一种可移植的方式进行此操作,并且该方法可以在多个Unix变体中运行,则几乎没有可用的选项。

我们要做的是,调用者进程必须使用argv [0]参数调用exec,该参数指向我们想要在进程输出中看到的名称,文件名指向实际的可执行文件。

我们可以使用以下命令从Shell尝试这种行为:

exec -a "This is my cute name" bash

那将用一个名为"这是我的可爱名字"的名字代替当前的bash进程。

为了在C语言中执行此操作,我们可以查看sendmail的源代码或者已广泛移植的任何其他软件,并找到支持此功能的跨操作系统的所有变体。

某些操作系统具有setproctitle(3)API,其他一些操作系统则允许我们覆盖argv [0]的内容并显示该结果。