Если это будет процесс, то Вы ожидаете "владеть" (например, Вы используете это для проверки изодромного с предварением для процесса, которым Вы управляете), можно просто отправить сигнал 0 в него.
>> Process.kill 0, 370
=> 1
>> Process.kill 0, 2
Errno::ESRCH: No such process
from (irb):5:in `kill'
from (irb):5
>>
@John T, @Dustin: На самом деле, парни, я просмотрел Процесс rdocs, и он похож
Process.getpgid( pid )
, менее сильное средство применения той же техники.
Можно попытаться использовать
Process::kill 0, pid
, где изодромный с предварением изодромное с предварением число, если изодромное с предварением работает, оно должно возвратиться 1.
Разница между подходами Process.getpgid
и Process :: kill
, похоже, заключается в том, что происходит, когда pid существует, но принадлежит другому пользователю . Process.getpgid
вернет ответ, Process :: kill
выдаст исключение (Errno :: EPERM)
.
Исходя из этого, я рекомендую Process.getpgid
хотя бы по той причине, что он избавляет вас от необходимости перехватывать два разных исключения.
Вот код, который я использую:
begin
Process.getpgid( pid )
true
rescue Errno::ESRCH
false
end