我需要查看给定的进程ID是否正在运行,它必须在Java或JRuby(最好是Ruby解决方案)中工作.它可以依赖于Linux系统(特别是Debian和/或Ubuntu).
我已经有了我正在寻找的PID,只需要查看它是否正在运行.
更新:
感谢所有人的回复!我很欣赏它,但它不是我要找的东西...我希望在标准的Ruby库(或Java,但最好是Ruby)中有一些东西......如果没有这样的库调用存在,我可能会坚持我已经拥有的procfs解决方案.
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
Unix具有围绕信号零的kill系统调用的特殊功能.执行错误检查,但不发送信号.
def pid_exists? (pid) system "kill -0 #{pid}" return $? == 0 end
一个警告:这将无法检测到您没有权限发出信号的进程.