Исследовал это в предыдущем проекте ...
По-видимому, обычная практика - использовать Process.kill(0, pid)
, чтобы проверить pid, чтобы увидеть,
сигнал может быть отправлен. Этот метод вернет true только в том случае, если оба процесса существуют и , и вызывающая сторона имеет разрешение сообщить об этом. Возвращаемое значение false может означать, что процесс не существует , или у пользователя нет соответствующего разрешения , или pid имеет неправильный тип (то есть строка) или ...
Вы можете поймать конкретное исключение, которое указывает на несуществование, Errno::ESRCH
, "Нет такого процесса", отличающее его от отсутствия разрешения и т. Д.
def process_exists?(pid)
begin
Process.kill(0, pid)
rescue Errno::ESRCH # "No such process"
return false
rescue Errno::EPERM # "Operation not permitted"
# at least the process exists
return true
else
return true
end
end
Очевидно, не пуленепробиваемый, но это начало ...