在Linux上更改C中的实际进程名称

时间:2015-07-31 13:21:48

标签: c linux process

我目前正在尝试更改进程的进程名称,以便我可以使用htop,top,...更轻松地阅读。我希望LD_PRELOAD将此代码放入另一个进程,以便重命名为environemt变量。

我在互联网上发现了很多东西,但没有任何作用:

prctl(PR_SET_NAME, "Test");

这不起作用,因为htop不尊重名称。

Nginx setproctitleLink)也不起作用,因为它剥离了参数(进程需要的参数)。

我尝试了所有我发现的东西,现在我没有想法。

这在Linux中是否可行?怎么样?

2 个答案:

答案 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
    ;
}