mirror of
https://github.com/nishiki/swapus.git
synced 2024-11-23 04:47:52 +00:00
feat: add option reverse
This commit is contained in:
parent
4b7c98ed28
commit
6134b26dcc
2 changed files with 65 additions and 24 deletions
41
bin/swapus
41
bin/swapus
|
@ -16,31 +16,24 @@
|
||||||
# specific language governing permissions and limitations
|
# specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
class SwapUsage
|
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
||||||
def initialize
|
|
||||||
@processes = {}
|
require 'optparse'
|
||||||
|
require 'swapus'
|
||||||
|
|
||||||
|
reverse = false
|
||||||
|
|
||||||
|
OptionParser.new do |opts|
|
||||||
|
opts.banner = 'Usage: swapus [options]'
|
||||||
|
|
||||||
|
opts.on('-h', '--help', 'Show this message') do
|
||||||
|
puts opts
|
||||||
|
exit 0
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_processes
|
opts.on('-r', '--reverse', 'Reverse the result order') do
|
||||||
Dir['/proc/[0-9]*'].map do |pid_dir|
|
reverse = true
|
||||||
pid = File.basename(pid_dir).to_i
|
|
||||||
cmd = File.read("#{pid_dir}/cmdline").tr("\x00", ' ').strip
|
|
||||||
swap = File.read("#{pid_dir}/status")[/^VmSwap:\s+([0-9]+)\s+kB$/, 1].to_i
|
|
||||||
|
|
||||||
@processes[pid] = { cmd: cmd, swap: swap } if swap.positive?
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
end.parse!
|
||||||
|
|
||||||
def show
|
SwapUsage.new(reverse).run
|
||||||
@processes.sort_by { |_, v| v[:swap] }.each do |pid, values|
|
|
||||||
puts "#{values[:swap]} kB [#{pid}] #{values[:cmd]}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def run
|
|
||||||
get_processes
|
|
||||||
show
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
SwapUsage.new.run
|
|
||||||
|
|
48
lib/swapus.rb
Executable file
48
lib/swapus.rb
Executable file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
class SwapUsage
|
||||||
|
def initialize(reverse)
|
||||||
|
@processes = {}
|
||||||
|
@reverse = reverse
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_processes
|
||||||
|
Dir['/proc/[0-9]*'].map do |pid_dir|
|
||||||
|
pid = File.basename(pid_dir).to_i
|
||||||
|
cmd = File.read("#{pid_dir}/cmdline").tr("\x00", ' ').strip
|
||||||
|
swap = File.read("#{pid_dir}/status")[/^VmSwap:\s+([0-9]+)\s+kB$/, 1].to_i
|
||||||
|
|
||||||
|
@processes[pid] = { cmd: cmd, swap: swap } if swap.positive?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def show
|
||||||
|
@processes = @processes.sort_by { |_, v| v[:swap] }
|
||||||
|
@processes = @processes.reverse if @reverse
|
||||||
|
|
||||||
|
@processes.each do |pid, values|
|
||||||
|
puts "#{values[:swap]} kB [#{pid}] #{values[:cmd]}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def run
|
||||||
|
get_processes
|
||||||
|
show
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue