当前位置:  开发笔记 > 编程语言 > 正文

如何在Linux上使用Java或JRuby确定是否正在运行不同的进程ID?

如何解决《如何在Linux上使用Java或JRuby确定是否正在运行不同的进程ID?》经验,为你挑选了2个好方法。

我需要查看给定的进程ID是否正在运行,它必须在Java或JRuby(最好是Ruby解决方案)中工作.它可以依赖于Linux系统(特别是Debian和/或Ubuntu).

我已经有了我正在寻找的PID,只需要查看它是否正在运行.


更新:

感谢所有人的回复!我很欣赏它,但它不是我要找的东西...我希望在标准的Ruby库(或Java,但最好是Ruby)中有一些东西......如果没有这样的库调用存在,我可能会坚持我已经拥有的procfs解决方案.



1> Jay..:

Darron的评论很明显,但是你可以使用Ruby的Process.kill方法和0信号,而不是调用"kill"二进制文件:

#!/usr/bin/ruby 

pid = ARGV[0].to_i

begin
    Process.kill(0, pid)
    puts "#{pid} is running"
rescue Errno::EPERM                     # changed uid
    puts "No permission to query #{pid}!";
rescue Errno::ESRCH
    puts "#{pid} is NOT running.";      # or zombied
rescue
    puts "Unable to determine status for #{pid} : #{$!}"
end

[user @ host user] $ ./is_running.rb 14302
14302正在运行

[user @ host user] $ ./is_running.rb 99999
99999未运行.

[user @ host user] $ ./is_running.rb 37无权
查询37!

[user @ host user] $ sudo ./is_running.rb 37
37正在运行

参考:http://pleac.sourceforge.net/pleac_ruby/processmanagementetc.html



2> Darron..:

Unix具有围绕信号零的kill系统调用的特殊功能.执行错误检查,但不发送信号.

def pid_exists? (pid)
    system "kill -0 #{pid}"
    return $? == 0
end

一个警告:这将无法检测到您没有权限发出信号的进程.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有