Найти идентификатор процесса по имени

Как найти 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
7
задан the Tin Man 9 March 2016 в 23:03
поделиться

1 ответ

Как это сделать, зависит от вашей операционной системы. Предполагая 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.

9
ответ дан 6 December 2019 в 15:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: