Как найти pid по имени или полной командной строке в Ruby, без вызова внешнего исполняемого файла?
Я отправляю SIGUSR2 процессу, командная строка которого содержит ruby job.rb
. Я хотел бы сделать следующее без вызова pgrep
:
uid = Process.uid
pid = `pgrep -f "ruby job.rb" -u #{uid}`.split("\n").first.to_i
Process.kill "USR2", pid
Как это сделать, зависит от вашей операционной системы. Предполагая Linux, вы можете вручную просмотреть файловую систему /proc и найти нужную командную строку. Однако это то же самое, что делает pgrep, и фактически сделает программу менее переносимой.
Что-то вроде этого может сработать.
def get_pid(cmd)
Dir['/proc/[0-9]*/cmdline'].each do|p|
if File.read(p) == cmd
Process.kill( "USR2", p.split('/')[1] )
end
end
end
Будьте осторожны, копаясь в /proc.