我目前正在尝试更改进程的进程名,以便我可以在htop、top等工具中更轻松地阅读。我想将这段代码使用LD_PRELOAD
注入到另一个进程中,以便它通过环境变量重命名。
我在网上找了很多资料,但都没有用:
prctl(PR_SET_NAME, "Test");
这不起作用是因为htop没有遵守名称。
Nginx的setproctitle
(链接)也不能工作,因为它剥夺了进程所需的参数。
我尝试了所有我能找到的方法,现在我已经没有了想法。
在Linux中有可能吗?怎么做?
我目前正在尝试更改进程的进程名,以便我可以在htop、top等工具中更轻松地阅读。我想将这段代码使用LD_PRELOAD
注入到另一个进程中,以便它通过环境变量重命名。
我在网上找了很多资料,但都没有用:
prctl(PR_SET_NAME, "Test");
这不起作用是因为htop没有遵守名称。
Nginx的setproctitle
(链接)也不能工作,因为它剥夺了进程所需的参数。
我尝试了所有我能找到的方法,现在我已经没有了想法。
在Linux中有可能吗?怎么做?
通过 shell 脚本或使用 exec
运行您的程序,并将所需的名称作为 argv [0]
传递:
#/bin/bash
exec -a fancy_name a.out ...
或者 C/C++:
execl( "./a.out", "fancy_name", ... );
c++
而不是 bash
或运行。 - Victor Polevoy( exec sleep hurz 120; )
和 ( exec -a hurz sleep 120; )
,然后使用 ps aux|grep hurz
查找进程。 - ex-bart#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define NEW_NAME "hello_world"
int main(int argc, char **argv) {
if(strcmp(argv[0], NEW_NAME)) {
argv[0] = NEW_NAME;
execv("/proc/self/exe", argv);
fputs("exec failed", stderr);
return 1;
}
while(1) // so it goes to the top
;
}