ps 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +43 -0
- data/lib/ps.rb +12 -4
- data/lib/ps/process.rb +1 -1
- data/lib/ps/process_list.rb +3 -1
- data/lib/ps/version.rb +1 -1
- metadata +48 -62
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# PS Gem
|
2
|
+
A gem for interacting with the **p**rocess **s**tatus utility on unix systems.
|
3
|
+
|
4
|
+
### Getting information on a specific process
|
5
|
+
|
6
|
+
[proc1,proc2] = PS.pid(1234,321)
|
7
|
+
|
8
|
+
or for shorthand
|
9
|
+
|
10
|
+
proc1 = PS(1234)
|
11
|
+
process_list = [proc1,proc2] = PS(1234,321)
|
12
|
+
|
13
|
+
### Finding process based on name
|
14
|
+
|
15
|
+
process_list = PS(/Firefox.app/)
|
16
|
+
|
17
|
+
### Finding process based on attached port
|
18
|
+
|
19
|
+
To return any processes attached to port 80.
|
20
|
+
|
21
|
+
process_list = PS(':80')
|
22
|
+
|
23
|
+
## Process
|
24
|
+
|
25
|
+
Processes have methods for every value listed in `ps -L` with `%` aliased to `pct`. The method `mem` was added which gives the megabytes of memory used by the process. The method `kill!(sig="INT")` was also added to send a kill command to the process. And you can call `alive?` to poll if the process is still alive.
|
26
|
+
|
27
|
+
## Example
|
28
|
+
|
29
|
+
If I wanted to kill firefox if it got more than 50% cpu or 600mb of memory.
|
30
|
+
|
31
|
+
fx = PS(/Firefox.app/).first
|
32
|
+
# only kill if taking up more than 50% cpu or 600mb of memory
|
33
|
+
exit unless fx.pcpu > 50 || fx.mem > 600
|
34
|
+
retries = 0
|
35
|
+
fx.kill!
|
36
|
+
while fx.alive?
|
37
|
+
retries += 1
|
38
|
+
if retries > 5
|
39
|
+
# If sigint hasn't worked after .5 sec try SIGTERM
|
40
|
+
fx.kill!("TERM")
|
41
|
+
end
|
42
|
+
sleep 0.1
|
43
|
+
end
|
data/lib/ps.rb
CHANGED
@@ -49,7 +49,7 @@ module PS
|
|
49
49
|
def from_lsof match, args={}
|
50
50
|
lines = `lsof -i #{match} -sTCP:LISTEN`.chomp.split("\n")
|
51
51
|
lines.shift # remove header
|
52
|
-
|
52
|
+
|
53
53
|
pids = lines.collect do |line|
|
54
54
|
if m = line.match(/\s*\w+\s+(\d+)/)
|
55
55
|
m[1].to_i
|
@@ -68,6 +68,8 @@ require 'ps/process_list_printer'
|
|
68
68
|
|
69
69
|
def PS *args
|
70
70
|
case args[0]
|
71
|
+
when /\:\d+$/
|
72
|
+
PS.from_lsof(*args)
|
71
73
|
when Regexp
|
72
74
|
opts = args[1] || {}
|
73
75
|
procs = PS.all(opts)
|
@@ -75,10 +77,16 @@ def PS *args
|
|
75
77
|
procs = procs.select {|proc| proc.pid != Process.pid} unless opts[:include_self]
|
76
78
|
procs
|
77
79
|
when Integer
|
78
|
-
|
80
|
+
if args[1].is_a?(Integer)
|
81
|
+
PS.pid(*args)
|
82
|
+
else
|
83
|
+
PS.pid(*args).first
|
84
|
+
end
|
85
|
+
when Array
|
86
|
+
pids = args[0]
|
87
|
+
pids << args[1] || {}
|
88
|
+
PS.pid(*pids)
|
79
89
|
when Hash
|
80
90
|
PS.all(*args)
|
81
|
-
when /\:\d+$/
|
82
|
-
PS.from_lsof(*args)
|
83
91
|
end
|
84
92
|
end
|
data/lib/ps/process.rb
CHANGED
data/lib/ps/process_list.rb
CHANGED
@@ -28,6 +28,8 @@ module PS
|
|
28
28
|
to.send :puts, printer.to_s
|
29
29
|
end
|
30
30
|
|
31
|
+
# Print out all the processes and accept user input to return
|
32
|
+
# the process objects selected.
|
31
33
|
def choose question=nil
|
32
34
|
if empty?
|
33
35
|
puts "No processes found."
|
@@ -76,7 +78,7 @@ module PS
|
|
76
78
|
# it to work any other way.
|
77
79
|
def method_missing(*args, &blk)
|
78
80
|
new_target = @target.send(*args, &blk)
|
79
|
-
|
81
|
+
|
80
82
|
new_target.class == @target.class ? self.class.new(new_target) : new_target
|
81
83
|
end
|
82
84
|
end
|
data/lib/ps/version.rb
CHANGED
metadata
CHANGED
@@ -1,64 +1,60 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ps
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 7
|
10
|
-
version: 0.0.7
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Tal Atlas
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-08-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rspec
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :development
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: ansi
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: ansi
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
38
33
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
46
38
|
type: :runtime
|
47
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
48
46
|
description: A ruby utility for interacting with the unix tool 'ps'
|
49
|
-
email:
|
47
|
+
email:
|
50
48
|
- me@tal.by
|
51
49
|
executables: []
|
52
|
-
|
53
50
|
extensions: []
|
54
|
-
|
55
51
|
extra_rdoc_files: []
|
56
|
-
|
57
|
-
files:
|
52
|
+
files:
|
58
53
|
- .gitignore
|
59
54
|
- .irbrc
|
60
55
|
- .rspec
|
61
56
|
- Gemfile
|
57
|
+
- README.md
|
62
58
|
- Rakefile
|
63
59
|
- lib/ps.rb
|
64
60
|
- lib/ps/command.rb
|
@@ -73,39 +69,29 @@ files:
|
|
73
69
|
- test
|
74
70
|
homepage: https://github.com/Talby/ps
|
75
71
|
licenses: []
|
76
|
-
|
77
72
|
post_install_message:
|
78
73
|
rdoc_options: []
|
79
|
-
|
80
|
-
require_paths:
|
74
|
+
require_paths:
|
81
75
|
- lib
|
82
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
77
|
none: false
|
84
|
-
requirements:
|
85
|
-
- -
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
|
88
|
-
|
89
|
-
- 0
|
90
|
-
version: "0"
|
91
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
83
|
none: false
|
93
|
-
requirements:
|
94
|
-
- -
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
|
97
|
-
segments:
|
98
|
-
- 0
|
99
|
-
version: "0"
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
100
88
|
requirements: []
|
101
|
-
|
102
89
|
rubyforge_project: ps
|
103
|
-
rubygems_version: 1.8.
|
90
|
+
rubygems_version: 1.8.24
|
104
91
|
signing_key:
|
105
92
|
specification_version: 3
|
106
93
|
summary: A ruby wrapper for the unix tool 'ps'
|
107
|
-
test_files:
|
94
|
+
test_files:
|
108
95
|
- spec/command_spec.rb
|
109
96
|
- spec/ps_spec.rb
|
110
97
|
- spec/spec_helper.rb
|
111
|
-
has_rdoc:
|