设置线程/ 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]的内容并显示该结果。