Class: Rkill::CLI

Inherits:
Object
  • Object
show all
Defined in:
lib/rkill/cli.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ CLI

Returns a new instance of CLI.



6
7
8
9
# File 'lib/rkill/cli.rb', line 6

def initialize opts
  @opts = opts.dup.freeze
  detect_type
end

Class Method Details

.startObject



62
63
64
# File 'lib/rkill/cli.rb', line 62

def start
  new(ARGV).run!
end

Instance Method Details

#detect_typeObject



11
12
13
14
15
16
17
18
# File 'lib/rkill/cli.rb', line 11

def detect_type
  indexes = []
  indexes << @regex_index = @opts.find_index {|opt| opt =~ /^\/.+\/[imx]{0,3}$/}
  indexes << @pcpu_index = @opts.find_index {|opt| opt =~ /^pcpu$/i}
  indexes << @pmem_index = @opts.find_index {|opt| opt =~ /^pmem$/i}
  indexes << @mem_index = @opts.find_index {|opt| opt =~ /^mem$/i}
  @first_index = indexes.compact.min
end

#get_processesObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/rkill/cli.rb', line 20

def get_processes
  return if @first_index.nil?
  pcpu = eval(@opts[@pcpu_index+1]) if @pcpu_index
  
  pmem = eval(@opts[@pmem_index+1]) if @pmem_index

  mem  = eval(@opts[@mem_index+1]) if @mem_index

  regex = eval(@opts[@regex_index]) if @regex_index

  processes = regex.nil? ? PS.all : PS(regex)

  processes = processes.over :pcpu, pcpu if pcpu
  processes = processes.over :pmem, pmem if pmem
  processes = processes.over :mem,  mem  if mem

  processes
end

#run!Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/rkill/cli.rb', line 39

def run!
  command = BIN.dup << ' '
  
  if @first_index.nil?
    command << "'#{ARGV.join("' '")}'"
  else
    command << "'" << ARGV[0...@first_index].join("' '") << "' "
    procs = get_processes.choose("Select processes to kill or hit enter to select all:")
    pids = procs.collect {|proc| proc.pid if proc}.compact

    abort if pids.empty?

    command << pids.join(' ')
  end

  if Rkill.test
    puts command
  else
    system(command)
  end
end