Найти идентификатор процесса по имени - PullRequest
7 голосов
/ 26 августа 2010

Как найти 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

Ответы [ 3 ]

8 голосов
/ 26 августа 2010

Как это сделать, зависит от вашей операционной системы.Предполагая Linux, вы можете вручную просканировать файловую систему / proc и найти правильную командную строку.Тем не менее, это то же самое, что делает pgrep, и фактически сделает программу менее переносимой.

Примерно так может работать.осторожно ковыряться в /proc.

4 голосов
/ 26 августа 2010

Быстрый поиск в Google дал sys_proctable , который должен позволить вам сделать это портативным способом.

Отказ от ответственности: я не использую Ruby, не могу подтвердить, если этоработы.

1 голос
/ 04 августа 2012

Системы на основе Debian находят pid с помощью команды pidof.

Некоторые функции уничтожения с помощью ruby:

def killPid(cmd)
   pid=exec("pidof #{cmd}")
   Process.kill "USR2", pid
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...