程序运行时动态修改进程名

发布: 2014-04-20 16:23

在做平台的过程中,碰到一个可能的需要,平台服务的的进程名一般都不变的,
如果需要动态在外部监控进程的执行状态,比如程序正在执行什么功能,
也许可以通过动态修改进程的名字实现,可以把正在执行的功能做个摘要放在进程名字中。

在linux上,有一个系统调用prctl,这是一个综合性的函数,可以实现一些进程的控制功能。
动态修改进程名的功能也就是在prctl函数。

来看看prctl的函数原型,

NAME
prctl - operations on a process

SYNOPSIS
[code type="C"]
#include

int prctl(int option, unsigned long arg2, unsigned long arg3,
unsigned long arg4, unsigned long arg5);
[/code]

虽然参数比较多,也是由于这个函数包含了太多功能,这一特点与IO操作的ioctl函数非常类型。
修改进程名的话,则只使用到前两个参数:
prctl(PR_SET_NAME, (unsigned long)"newprocessname");

注意使用prctl修改的进程名,可能会影响查看进程列表的方式。
使用ps a可以显示新的名字,而使用ps ax时却还是原来的名字。
另外,使用pstree也会显示新的名字。


该函数还有设置进程优级的功能,对该函数的其他功能请详细参与函数手册。



原文: http://qtchina.tk/?q=node/801

Powered by zexport