unix-ps 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab9c878066ae8497d5bf7e5a50a5761b97e2ec66
4
- data.tar.gz: 0f38a8fd0a248e80da06cf901f937b94b0be664d
3
+ metadata.gz: c71436fe45e3030d2418f0e4f22b6b1ecdf68294
4
+ data.tar.gz: ae9a563e360c008716e6383b39fea929b78db902
5
5
  SHA512:
6
- metadata.gz: 3469a6d60ef28d04629690a4517393454da098324150b8094064d963e05d11273850629a436bc34795bf38059336d203723f29ac265dcb5843107940ce014f18
7
- data.tar.gz: ae76bef0a80c82d28365f3c2073f7674584e6e837d38a1a3aad9d100dd983115a9978e4636e4f5be5046df1e473ca03d4692c5ce6a8077b67c4bdb6817bd6c5c
6
+ metadata.gz: d9a1dcb62db448e0c804ec38f26a7092efd25f76edeab5355a7cf5809ae62c882f64fc2f24a9f1ac82960a4d3e3337e4946e239c13e6ec8835e252cd2c1eabef
7
+ data.tar.gz: 3ca2ed3566a4efdcc41fafc22ee3cdc1b2dbbba986b0e823be5ca66585ae1d9d6ab6cd07263b6559c742a87df971bfd4c2c242fdf847a27abecb37a3b4a893e1
data/README.md CHANGED
@@ -19,4 +19,11 @@ UnixPs.processes.first
19
19
  => #<UnixPs::UnixProcess:0x007fa553834758 @user="jason", @pid=54672, @cpu="100.5", @mem="0.6", @vsz="1115436", @rss="93692", @tty="??", @stat="R", @start=2014-06-04 00:00:00 -0700, @time="3162:49.67", @command="/Applications/Dropbox.app/Contents/MacOS/Dropbox\n">
20
20
  ```
21
21
 
22
+ Search for processes by name
23
+ ```ruby
24
+ UnixPs.processes("mysql")
25
+ => [#<UnixPs::UnixProcess:0x007f82649d7838 @user="root", @pid=19440, @cpu="0.0", @mem="0.0", @vsz="2445652", @rss="336", @tty="s001", @stat="S+", @start=2014-05-20 00:00:00 -0700, @time="0:00.02", @command="/bin/sh\n">, #<UnixPs::UnixProcess:0x007f82649d71f8 @user="root", @pid=19439, @cpu="0.0", @mem="0.0", @vsz="2461648", @rss="108", @tty="s001", @stat="S+", @start=2014-05-20 00:00:00 -0700, @time="0:00.01", @command="sudo\n">, #<UnixPs::UnixProcess:0x007f82649d6bb8 @user="jason", @pid=55626, @cpu="0.0", @mem="0.0", @vsz="2432784", @rss="628", @tty="s000", @stat="S+", @start=2014-06-05 11:16:00 -0700, @time="0:00.00", @command="grep\n">, #<UnixPs::UnixProcess:0x007f82649d64d8 @user="jason", @pid=55624, @cpu="0.0", @mem="0.0", @vsz="2433364", @rss="920", @tty="s000", @stat="S+", @start=2014-06-05 11:16:00 -0700, @time="0:00.00", @command="sh\n">]
26
+
27
+ ```
28
+
22
29
 
data/lib/unix_ps.rb CHANGED
@@ -1,25 +1,53 @@
1
+ require 'tempfile'
1
2
  require './unix_ps/unix_process'
2
3
  module UnixPs
3
4
 
4
5
  # Subject to change, hopefully this does not cause issues
5
6
  DELIM = "!"
6
- COLUMNS = (1..11).collect{|i| "$#{i}"}
7
- COLUMNS = COLUMNS.join(" \"#{DELIM}\" ")
7
+ @columns = (1..10).collect{|i| "$#{i}"}
8
+ @columns = @columns.join(" \"#{DELIM}\" ")
9
+ @command_column = "for(i=1;i<11;i++) $i=\"\";print $0"
8
10
 
9
11
  def self.processes(search=nil)
10
12
 
11
- ps_output = nil
13
+ # Get ps aux output.
14
+ #TODO: Handle errors
15
+ ps_output = `ps aux`
16
+
17
+ # Store the output in a temporary file so we can operate on the data without
18
+ # losing consistency.
19
+ file = Tempfile.new('unix-ps')
20
+ file.write(ps_output)
21
+
22
+ # Lines to create process objects from
23
+ lines = nil
12
24
 
13
25
  if search.is_a? String
14
- ps_output = `ps aux | grep #{search} | awk '{print #{COLUMNS}}'`.lines
26
+ lines = `grep #{search} #{file.path}| awk '{print #{@columns}}'`.lines
27
+ command_columns = `grep #{search} #{file.path}| awk '{#{@command_column}}'`.lines
28
+
29
+ # Merge columns + command column
30
+ lines = lines.each_with_index.map {|line, index|
31
+ line = line.split(DELIM)
32
+ command = command_columns[index].strip
33
+ line.push(command)
34
+ }
15
35
  else
16
- ps_output = `ps aux | awk '{print #{COLUMNS}}'`.lines
36
+ lines = `#{file.path} | awk '{print #{@columns}}'`.lines
37
+ command_columns = `#{file.path}| awk '{#{@command_column}}'`.lines
38
+
39
+ # Merge columns + command column
40
+ lines = lines.each_with_index.map {|line, index|
41
+ line = line.split(DELIM)
42
+ command = command_columns[index].strip
43
+ line.push(command)
44
+ }
17
45
  end
18
46
 
19
47
  # Pop off header columns
20
- ps_output.shift
48
+ lines.shift
21
49
 
22
50
  # Generate objects
23
- ps_output.collect { |line| UnixProcess.new(line) }
51
+ lines.collect { |line| UnixProcess.new(line) }
24
52
  end
25
53
  end
@@ -6,25 +6,22 @@ module UnixPs
6
6
 
7
7
  attr_accessor :user, :pid, :cpu, :mem, :vsz, :rss, :tty, :stat, :start, :time, :command
8
8
 
9
- def initialize(line)
10
- # Split each line into fields by the delimiter
11
- fields = line.split(UnixPs::DELIM)
12
-
13
- # Assign the fields
14
- @user = fields[0]
15
- @pid = fields[1].to_i
16
- @cpu = fields[2]
17
- @mem = fields[3]
18
- @vsz = fields[4]
19
- @rss = fields[5]
20
- @tty = fields[6]
21
- @stat = fields[7]
22
- puts fields[8]
23
- @start = Time.parse(fields[8])
24
- @time = fields[9]
25
- @command = fields[10]
9
+ def initialize(columns)
10
+ # Assign the columns
11
+ @user = columns[0]
12
+ @pid = columns[1].to_i
13
+ @cpu = columns[2].to_f
14
+ @mem = columns[3].to_f
15
+ @vsz = columns[4]
16
+ @rss = columns[5]
17
+ @tty = columns[6]
18
+ @stat = columns[7]
19
+ @start = Time.parse(columns[8])
20
+ @time = columns[9]
21
+ @command = columns[10]
26
22
  end
27
23
 
24
+ # Kill a process
28
25
  def kill!(sig=nil)
29
26
  sig ||= 'INT'
30
27
  Process.kill(sig, self.pid)
@@ -1,3 +1,3 @@
1
1
  module UnixPs
2
- VERSION = "0.0.2"
3
- end
2
+ VERSION = "0.0.4"
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unix-ps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Parraga
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-05 00:00:00.000000000 Z
11
+ date: 2014-06-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A Ruby wrapper around the unix tool ps.
14
14
  email:
@@ -17,12 +17,10 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
- - ".gitignore"
21
20
  - README.md
22
21
  - lib/unix_ps.rb
23
22
  - lib/unix_ps/unix_process.rb
24
23
  - lib/unix_ps/version.rb
25
- - unix_ps.gemspec
26
24
  homepage: https://github.com/Sovietaced/unix-ps
27
25
  licenses: []
28
26
  metadata: {}
data/.gitignore DELETED
@@ -1,34 +0,0 @@
1
- *.gem
2
- *.rbc
3
- /.config
4
- /coverage/
5
- /InstalledFiles
6
- /pkg/
7
- /spec/reports/
8
- /test/tmp/
9
- /test/version_tmp/
10
- /tmp/
11
-
12
- ## Specific to RubyMotion:
13
- .dat*
14
- .repl_history
15
- build/
16
-
17
- ## Documentation cache and generated files:
18
- /.yardoc/
19
- /_yardoc/
20
- /doc/
21
- /rdoc/
22
-
23
- ## Environment normalisation:
24
- /.bundle/
25
- /lib/bundler/man/
26
-
27
- # for a library or gem, you might want to ignore these files since the code is
28
- # intended to run in multiple environments; otherwise, check them in:
29
- # Gemfile.lock
30
- # .ruby-version
31
- # .ruby-gemset
32
-
33
- # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
- .rvmrc
data/unix_ps.gemspec DELETED
@@ -1,17 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "unix_ps/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "unix-ps"
7
- s.version = UnixPs::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ["Jason Parraga"]
10
- s.email = ["Sovietaced@gmail.com"]
11
- s.homepage = "https://github.com/Sovietaced/unix-ps"
12
- s.summary = %q{A Ruby wrapper around the unix tool ps.}
13
- s.description = %q{A Ruby wrapper around the unix tool ps.}
14
-
15
- s.files = `git ls-files`.split("\n")
16
- s.require_paths = ["lib"]
17
- end