рубиновый ребенок списка pids

Как я могу получить pids всех дочерних процессов, которые были запущены с рубинового сценария?

11
задан tig 18 December 2009 в 18:11
поделиться

2 ответа

Вы можете получить текущий процесс с помощью:

Process.pid

см. http://whynotwiki.com/Ruby_/_Process_management для получения дополнительных сведений.

Затем вы можете использовать определенные команды для получения дочерних идентификаторов. В системах на основе unix это будет что-то вроде

# Creating 3 child processes.
IO.popen('uname')
IO.popen('uname')
IO.popen('uname')

# Grabbing the pid.
pid = Process.pid

# Get the child pids.
pipe = IO.popen("ps -ef | grep #{pid}")

child_pids = pipe.readlines.map do |line|
  parts = line.lstrip.split(/\s+/)
  parts[1] if parts[2] == pid.to_s and parts[1] != pipe.pid.to_s
end.compact

# Show the child processes.
puts child_pids

Протестировано на osx + ubuntu.

Я признаю, что это, вероятно, работает не во всех системах unix, поскольку я считаю вывод ps -ef незначительно отличается в разных версиях unix.

12
ответ дан 3 December 2019 в 05:34
поделиться

Process.fork отвечает PID порожденного дочернего элемента. Просто отслеживайте их в массиве по мере создания детей. См. http://ruby-doc.org/core/classes/Process.html#M003148 .

6
ответ дан 3 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

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