Jump to Navigation

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

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

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

来看看prctl的函数原型,

NAME
prctl - operations on a process

SYNOPSIS

  1. #include <sys/prctl.h>
  2.  
  3. int prctl(int option, unsigned long arg2, unsigned long arg3,
  4. unsigned long arg4, unsigned long arg5);

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

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

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

添加新评论

Plain text

  • 不允许HTML标记。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.


Main menu 2

Story | by Dr. Radut