Как я могу получить pids всех дочерних процессов, которые были запущены с рубинового сценария?
Вы можете получить текущий процесс с помощью:
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.
Process.fork отвечает PID порожденного дочернего элемента. Просто отслеживайте их в массиве по мере создания детей. См. http://ruby-doc.org/core/classes/Process.html#M003148 .