在 Linux 下“重命名进程名”有多种含义和做法,取决于你是想改命令显示名、改进程 title,还是彻底改二进制名。下面按常见场景说明。
exec -a my_new_name bash
或运行程序时:
exec -a my_process_name ./my_program
ps / top 中看到的 COMMAND 会变成 my_process_name
✅ 不影响真实二进制
❌ 只对当前 exec 生效
argv[0]Linux 允许修改 argv[0] 所在内存来改进程名(常见于 Nginx、Redis)。
#include <string.h>
int main(int argc, char *argv[]) {
strcpy(argv[0], "my_new_name");
while (1);
}
ps -ef 会显示 my_new_name
⚠️ 注意:
argv[0] 长度的内容argv[i] 并清空后续指针prctl(推荐方式)#include <sys/prctl.h>
prctl(PR_SET_NAME, "my_proc");
查看:
ps -o comm= -p <pid>
或
cat /proc/<pid>/comm
✅ 内核级进程名
❌ 长度限制 15 字符(TASK_COMM_LEN)
ps 中的完整命令行(cmdline)/proc/<pid>/cmdline在 C 中:
extern char **environ;
char *new = "my_process_name";
memset(argv[0], 0, envp[0] - argv[0]);
strcpy(argv[0], new);
常用于:
这是最简单的“物理重命名”:
cp myapp mynewname
./mynewname
ps 自然显示新名字。
#!/bin/bash
exec -a fake_name sleep 1000
| 目的 | 推荐方式 |
|---|---|
| 运维易识别 | prctl |
| 守护进程 | 改 argv[0] |
| 临时测试 | exec -a |
| 完全改名 | 复制二进制 |
如果你能说明:
我可以给你更精确的示例。