linux 修改进程名,linux下setproctitle修改进程名

原理:进程名被保存在 argv[0] 中,所有要改动进程名,只需要改动 argv[0],但是 argv[] 后续会跟 environ 环境变量内容,如果要 利用到传入的参数,以及环境变量,则需要先申请新的空间,将这些信息保存下来。[以下代码没有保存 environ]

#include

char** os_argv;

char* os_argv_last;

void init_setproctitle()

{

char * p;

size_t size;

int i;

size = 0;

os_argv_last = os_argv[0];

for (i = 0; os_argv[i]; ++i)

{

if (os_argv_last == os_argv[i])

{

size += strlen(os_argv[i]) + 1;

printf("i:%d size:%d\n", i, size);

os_argv_last = os_argv[i] + strlen(os_argv[i]) + 1;

}

}

printf("len:%d os_argv_last:%s\n", os_argv_last - os_argv[0], os_argv_last);

// 移动到了环境变量的最后

os_argv_last += strlen(os_argv_last);

}

void save_argv(int argc, const char** argv)

{

os_argv = (char **) argv;

}

void setproctitle(char *title)

{

char *p;

os_argv[1] = NULL;

p = strncpy((char *) os_argv[0], (char *) title,

strlen(title));

p += strlen(title);

if (os_argv_last - (char *) p > 0) {

printf("后面部分清零\n");

memset(p, 0, os_argv_last - (char *) p);

}

}

int main(int argc, char** argv)

{

save_argv(argc, argv);

init_setproctitle();

setproctitle("titlename");

printf("%s\n", argv[0]);

while (1) ;

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值