我目前正在尝试更改进程的进程名称,以便我可以使用htop,top,...更轻松地阅读。我希望LD_PRELOAD
将此代码放入另一个进程,以便重命名为environemt变量。
我在互联网上发现了很多东西,但没有任何作用:
prctl(PR_SET_NAME, "Test");
这不起作用,因为htop不尊重名称。
Nginx setproctitle
(Link)也不起作用,因为它剥离了参数(进程需要的参数)。
我尝试了所有我发现的东西,现在我没有想法。
这在Linux中是否可行?怎么样?
答案 0 :(得分:10)
只需通过shell脚本或您的程序通过exec
运行您的程序,并将所需的名称传递为argv[0]
:
#/bin/bash
exec -a fancy_name a.out ...
或C / C ++:
execl( "./a.out", "fancy_name", ... );
答案 1 :(得分:6)
#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
;
}