更改进程名称而不更改Linux中的argv

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

Solutions Collecting From Web of "更改进程名称而不更改Linux中的argv"

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

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

这意味着你将得到不同的进程名称ps -aps -ax

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

希望答案有帮助。

尝试这个:

 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

* /