class Process::Metrics::Memory::Linux

def self.capture(pid, **options)

Capture memory usage for the given process IDs.
def self.capture(pid, **options)
	usage = Memory.zero
	
	begin
		File.foreach("/proc/#{pid}/smaps_rollup") do |line|
			if /(?<name>.*?):\s+(?<value>\d+) kB/ =~ line
				if key = SMAP[name]
					usage[key] += value.to_i
				end
			end
		end
		
		usage.map_count += File.readlines("/proc/#{pid}/maps").size
	rescue Errno::ENOENT => error
		# Ignore.
	end
	
	return usage
end

def self.capture(pid, **options)

Capture memory usage for the given process IDs.
def self.capture(pid, **options)
	usage = Memory.zero
	
	begin
		File.foreach("/proc/#{pid}/smaps") do |line|
			# The format of this is fixed according to:
			# https://github.com/torvalds/linux/blob/351c8a09b00b5c51c8f58b016fffe51f87e2d820/fs/proc/task_mmu.c#L804-L814
			if /(?<name>.*?):\s+(?<value>\d+) kB/ =~ line
				if key = SMAP[name]
					usage[key] += value.to_i
				end
			elsif /VmFlags:\s+(?<flags>.*)/ =~ line
				# It should be possible to extract the number of fibers and each fiber's memory usage.
				# flags = flags.split(/\s+/)
				usage.map_count += 1
			end
		end
	rescue Errno::ENOENT => error
		# Ignore.
	end
	
	return usage
end

def self.supported?

Whether the memory usage can be captured on this system.
def self.supported?
	true
end

def self.supported?

Whether the memory usage can be captured on this system.
def self.supported?
	true
end

def self.supported?

def self.supported?
	false
end

def self.total_size

@returns [Numeric] Total memory size in kilobytes.
def self.total_size
	File.read("/proc/meminfo").each_line do |line|
		if /MemTotal:\s+(?<total>\d+) kB/ =~ line
			return total.to_i
		end
	end
end