Sha256: 0bc9452439a52f142840dcadd947e4d7e3c8cf56723f598373fa49b713b99ac8

Contents?: true

Size: 1.6 KB

Versions: 3

Compression:

Stored size: 1.6 KB

Contents

class Knj::Unix_proc
	attr_reader :data
	@procs = {}
	
	def self.spawn(data)
		proc_ele = @procs[data["pid"]]
		
		if proc_ele
			proc_ele.update_data(data)
		else
			@procs[data["pid"]] = Knj::Unix_proc.new(data)
		end
		
		return @procs[data["pid"]]
	end
	
	def self.list(args = {})
		cmdstr = "ps aux"
		grepstr = ""
		
		if args["grep"]
			grepstr = "grep #{Knj::Strings.unixsafe(args["grep"])}"
			cmdstr += " | #{grepstr}"
		end
		
		ret = []
		res = Knj::Os.shellcmd(cmdstr)
		
		res.scan(/^(\S+)\s+([0-9]+)\s+([0-9.]+)\s+([0-9.]+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+ (.+)($|\n)/) do |match|
			pid = match[1]
			
			data = {
				"user" => match[0],
				"pid" => pid,
				"cpu_last" => match[2],
				"ram_last" => match[3],
				"cmd" => match[4],
				"app" => File.basename(match[4])
			}
			
			next if (!args.has_key?("ignore_self") or args["ignore_self"]) and match[1].to_i == $$.to_i
			next if grepstr.length > 0 and match[4].index(grepstr) != nil #dont return current process.
			next if args.has_key?("pids") and args["pids"].index(pid) == nil
			
			ret << Knj::Unix_proc.spawn(data)
		end
		
		return ret
	end
	
	def self.find_self
		procs = Knj::Unix_proc.list("ignore_self" => false)
		pid_find = Process.pid
		
		proc_find = false
		procs.each do |proc_ele|
			if proc_ele["pid"].to_s == pid_find.to_s
				proc_find = proc_ele
				break
			end
		end
		
		return proc_find
	end
	
	def initialize(data)
		@data = data
	end
	
	def update_data(data)
		@data = data
	end
	
	def [](key)
		raise "No such data: #{key}" if !@data.has_key?(key)
		return @data[key]
	end
	
	def kill
		Process.kill(9, @data["pid"].to_i)
	end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
knjrbfw-0.0.7 lib/knj/unix_proc.rb
knjrbfw-0.0.4 lib/knj/unix_proc.rb
knjrbfw-0.0.3 lib/knj/unix_proc.rb