更改顶部的 ruby 进程名称
我想更改 linux/unix top 命令中显示的 ruby 进程的名称。 我已经尝试过该
$0='miname'
方法,但它仅适用于 ps 命令,并且在顶部,进程不断显示为“ruby”
I would like to change the name of the ruby process that gets displayed in the linux/unix top command. I have tried the
$0='miname'
approach but it only works with the ps command and in top the process keeps getting displayed as "ruby"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
Dave Thomas 发表了一篇有趣的帖子 在 Rails 中执行此操作。 实际的进程名称更改代码没有任何特定于 Rails 的内容。 他使用
$0='name'
方法。 当我按照他的步骤操作时,ps
和top
中的名称发生了更改。在帖子中,如果您的 top 版本默认不显示命令的简短版本,他建议使用
c
键盘命令。Dave Thomas had an interesting post on doing this in rails. There's nothing rails specific about the actual process name change code. He uses the
$0='name'
approach. When I followed his steps the name was changed inps
andtop
.In the post he suggests using the
c
keyboard command if your version of top doesn't show the short version of the command by default.Ruby 2.1 引入了
Process.setproctitle
用于此目的的方法:Ruby 2.1 introduced a
Process.setproctitle
method for this purpose:我不认为 Ruby 具有内置功能 (
setproctitle(3)
)。 您可能应该尝试查看 ruby-ffi 并创建setproctitle(3 )
。编辑:我知道你有答案,但我想向你展示一些使用 ffi 的代码:
在 OS X 上不起作用,因为
setproctitle(3)
不存在,在 FreeBSD 上工作。I don't think Ruby has the facility builtin (
setproctitle(3)
). You should probably try to look at ruby-ffi and create the interface tosetproctitle(3)
.EDIT: I know you have your answer but I want to show you some code to use ffi:
Does not work on OS X because
setproctitle(3)
does not exist, works on FreeBSD.$0 = 'Foo' 方法可以工作——但是许多版本的 top 会要求你用 'c' 打开命令行模式。 我们在这里使用 Rails 和 CentOS 来实现这一方法。 工作是一种享受
The $0 = 'Foo' method works -- but many versions of top will require you to toggle command-line mode on with 'c'. We this very method here with rails and CentOS. Works a treat
我遇到了类似的问题,通过将 Dave Thomas 帖子中的技术放入机架中间件中,而不是之前/之后的模式中,对其进行了一些更新。
将其放入 lib/rack/set_process_title.rb 中:
...这位于 config/environment.rb 的末尾:
博客文章中的更多文字: http://blog.actbluetech.com/2011/06/set-your-process-name-in -top-and-ps.html
I had a similar problem, updated the technique from the Dave Thomas post a little by putting it in a rack middleware, rather than the before/after pattern.
Put this in lib/rack/set_process_title.rb:
... and this goes at the end of config/environment.rb:
More words in the blog post: http://blog.actbluetech.com/2011/06/set-your-process-name-in-top-and-ps.html
我知道 Keltia 已经发布了非常类似的内容,但 Linux 没有 setproctitle(3)。
Linux 从 2.6.9 版本开始就在 prctl() 中提供了此功能。
我使用了 Fiddle/DL,因为它们默认包含在 Ruby 中。
I know Keltia already posted something very similar, but Linux doesn't have setproctitle(3).
Linux has had this functionality in prctl() since version 2.6.9.
I used Fiddle/DL since they are included by default with Ruby.
根据 @jessehz 的回答,以下代码在我的 Linux X86_64 上完美运行。
已测试 Ruby 1.9.3、2.0、2.1、2.2、2.3。
完美的!
From @jessehz answer, following code work perfect on my linux X86_64.
Ruby 1.9.3, 2.0, 2.1, 2.2, 2.3 is tested.
Perfect!