是否可以更改正在运行的进程的命令行(例如,以便在 top 中更容易识别它)?

是否可以更改正在运行的进程的命令行(例如,以便在 top 中更容易识别它)?

我使用 VMware Server 2 运行了许多 Linux 服务器。当它们的响应时间不太好或平均负载上升时,我会打开它top来查看发生了什么,或者对于我们的生产服务器,我top整天都在打开它。问题是,vmware-vmx进程的命令行是真的长,例如:

/usr/lib/vmware/bin/vmware-vmx -# product=2;name=VMware Server;version=2.0.2;buildnumber=203138;licensename=VMware GSX Server for Linux;licenseversion=3.0 build-203138; -@ pipe=/tmp/vmhsdaemon-0/vmxaf9a31943e9065f0;readyEvent=55 /var/lib/vmware/Virtual Machines/Kyle.vmwarevm/Kyle.vmx

所以top我所看到的是:

 4135 root      20   0  593m 324m 289m S   21  4.2   3038:04 /usr/lib/vmware/bin/vmware-vmx -# product=2;name=VMware Server;
 4106 root      10 -10  997m 399m 346m S    9  5.1   1135:25 /usr/lib/vmware/bin/vmware-vmx -# product=2;name=VMware Server;
 4074 root      20   0  833m 110m  97m S    2  1.4 722:19.38 /usr/lib/vmware/bin/vmware-vmx -# product=2;name=VMware Server;

在 VMWare Server 1 中,每个 VM 都以自己的用户身份运行,因此我可以轻松分辨出哪个是哪个。但在 VMWare Server 2 中则并非如此。除了购买非常宽的显示器或三重显示器设置外,我是否可以通过任何方式更改这些正在运行的进程的命令行,以便轻松识别哪个是哪个?我知道进程可以更改自身的命令行……我可以读取(但不能写入)/proc/nnn/cmdline……

有没有什么办法(以 root 身份)可以改变正在运行的进程的命令行?

答案1

虽然可能没有人会再使用 VMWare Server,但这个问题也会出现在其他进程中。你真的应该看着顶部相反,它允许侧滚动读取整个命令行并显示进程树:

http://htop.sourceforge.net/htop-1.0-screenshot.png

至于您的问题,更改已在运行的进程的命令行可能只有通过覆盖其 ARGV[0] 内存地址处的数据才有可能。据我所知,目前还没有可用的工具可以做到这一点changecmdline 4652 "foo process"。进一步讨论:http://stupefydeveloper.blogspot.de/2008/10/linux-change-process-name.html

答案2

那么以下内容如何:

watch 'ps -eo pid,pcpu,args | grep vmware'

Watch 将每 2 秒运行一次命令。pcpu是 CPU 百分比。

答案3

这确实是个让人恼火的问题。

真正的解决方案发布在这里:

http://blog.angulosolido.pt/2012/01/vmware-2-long-process-names-and-top.html

脚本并不漂亮,但是它有效。

答案4

这不是对您的问题的直接回答,但也许是对您的问题的回答:

  1. 使用 LSOF 找出哪些 PID 正在使用哪些 VMDK
  2. 使用 ps 和 grep 查找这些 PID

这可以很容易地编写脚本,但我现在没有打开 Linux 控制台。练习留给读者。

相关内容