我需要用C语言修改程序的进程名称
我确切地说,这不是我要改变的线程的名称
我想更改程序的名称,但我找到的唯一解决方案是修改argv[0]
的值。
我还找到了prctl(PR_SET_NAME, "newname")
的另一个解决方案,但此解决方案无效。
答案 0 :(得分:18)
调用prctl
和修改argv[0]
之间的区别是:
argv[0]
/proc/$pid/cmdline
更改信息
prctl(PR_SET_NAME)
/proc/$pid/status
更改信息
这意味着您将获得发布ps -a
和ps -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
* /