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

Mik*_*one 2 ruby java linux pid jruby

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

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


更新:

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

Jay*_*Jay 10

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
Run Code Online (Sandbox Code Playgroud)

[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


Dar*_*ron 5

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

def pid_exists? (pid)
    system "kill -0 #{pid}"
    return $? == 0
end
Run Code Online (Sandbox Code Playgroud)

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