在Linux中更改进程名称而不更改argv [0]

时间:2013-04-23 09:24:41

标签: c linux process rename argv

我需要用C语言修改程序的进程名称 我确切地说,这不是我要改变的线程的名称 我想更改程序的名称,但我找到的唯一解决方案是修改argv[0]的值。
我还找到了prctl(PR_SET_NAME, "newname")的另一个解决方案,但此解决方案无效。

2 个答案:

答案 0 :(得分:18)

调用prctl和修改argv[0]之间的区别是:

  • 修改argv[0]
  • 中的/proc/$pid/cmdline更改信息
  • prctl(PR_SET_NAME)
  • 中调用/proc/$pid/status更改信息

这意味着您将获得发布ps -aps -ax的流程的不同名称。

如果在执行ps时期望不同参数的进程名称相同,则可以同时执行这两个参数(即更改argv[0]并调用prctl)。

希望答案有所帮助。

答案 1 :(得分:-1)

试试这个:

char *process_name = "aaa\0";
memcpy((void *)argv[0], process_name, sizeof(process_name));

/ * 的 解释 为argv [0]分配的空间可能小于您要提供的名称,然后您将覆盖其他一些不相关的内存。 argv [0]大小可能只有2,如果你的进程名称是“averylongprocessname”,你将溢出argv [0]。你需要strlen(argv [0])并在memcpy中使用它。 thx @ecerulm

* /