ruby 列表子 pid
如何获取从 ruby 脚本启动的所有子进程的 pid?
How can I get pids of all child processes which were started from ruby script?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何获取从 ruby 脚本启动的所有子进程的 pid?
How can I get pids of all child processes which were started from ruby script?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
您可以通过以下方式获取当前进程:
请参阅 http://whynotwiki.com/Ruby_/_Process_management 了解更多信息细节。
然后就可以使用操作特定的命令来获取子进程的pid。在基于 UNIX 的系统上,这将类似于
在 osx+ubuntu 上测试。
我承认这可能不适用于所有 unix 系统,因为我相信 ps -ef 的输出在不同的 unix 风格上略有不同。
You can get the current process with:
see http://whynotwiki.com/Ruby_/_Process_management for further details.
Then you could use operating specific commands to get the child pids. On unix based systems this would be something along the lines of
Tested on osx+ubuntu.
I admit that this probably doesn't work on all unix systems as I believe the output of
ps -ef
varies slightly on different unix flavors.Process.fork 用生成的子进程的 PID 进行响应。当你生成孩子时,只需在数组中跟踪它们即可。请参阅http://ruby-doc.org/core/classes/Process.html# M003148。
Process.fork responds with the PID of the child spawned. Just keep track of them in an array as you spawn children. See http://ruby-doc.org/core/classes/Process.html#M003148.
也可以使用 sys-proctable gem 来完成:
Can be also done using
sys-proctable
gem:这实际上非常复杂并且是特定于平台的。实际上,如果所有子进程故意隐藏,您无法找到它们。
如果您只想终止生成的进程,有很多选择。对于测试框架我选择了两个:
1. 使用 pgid => 生成进程正确
2.插入变量
MY_CUSTOM_COOKIE=asjdkahf
,然后在环境中找到带有该cookie的procs并杀死它。仅供参考,使用
ps
找出进程层次结构是非常不可靠的。如果链中的一个进程退出,则其子进程的父进程 pid 为1
(至少在 Linux 上)。所以不值得实施。This is actually quiet complicated and is platform specific. You actually cannot find all sub-processes if they deliberately try to hide.
If you want to just kill spawned processes there are many options. For a test framework I chose two:
1. spawn processes with
pgid => true
2. insert variable
MY_CUSTOM_COOKIE=asjdkahf
, then find procs with that cookie in environment and kill it.FYI using
ps
to find out process hierarchy is very unreliable. If one process in the chain exits, then its sub-processes get a parent pid of1
(on linux at least). So it's not worth implementing.