lsof 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -0,0 +1,6 @@
1
+ 0.2.0
2
+ - Handles multiple processes listening to the pid
3
+ - Changed Lsof.listener_pid to Lsof.listener_pids
4
+
5
+ 0.1.0
6
+ - Initial Release
data/README CHANGED
@@ -4,5 +4,5 @@ Functions include getting the pid and killing a process that listens on a partic
4
4
 
5
5
  == Usage
6
6
  Lsof.running?(6666) # returns true if there is the process that listens on port 6666
7
- Lsof.kill(6666) # kill the process that listens on port 6666
8
- Lsof.listener_pid(6666) # returns the process id for the process that listens on port 6666
7
+ Lsof.kill(6666) # kill the processes that listens on port 6666
8
+ Lsof.listener_pids(6666) # returns the process ids for the process that listens on port 6666
data/Rakefile CHANGED
@@ -26,7 +26,7 @@ def run_suite
26
26
  end
27
27
 
28
28
  PKG_NAME = "lsof"
29
- PKG_VERSION = "0.1.0"
29
+ PKG_VERSION = "0.2.0"
30
30
  PKG_FILES = FileList[
31
31
  '[A-Z]*',
32
32
  '*.rb',
@@ -1,21 +1,23 @@
1
1
  class Lsof
2
2
  class << self
3
3
  def kill(port)
4
- pid = listener_pid(port)
5
- system "kill -9 #{pid}" if pid
4
+ pid = listener_pids(port)
5
+ `#{find_pids_cmd(port)} | xargs kill 2>&1`
6
6
  end
7
7
 
8
8
  def running?(port)
9
- listener_pid(port) ? true : false
9
+ listener_pids(port).empty? ? false : true
10
10
  end
11
11
 
12
- def listener_pid(port)
13
- port = `lsof -i tcp:#{port} | grep '(LISTEN)' | awk '{print $2}'`
14
- if port.empty?
15
- nil
16
- else
12
+ def listener_pids(port)
13
+ output = `#{find_pids_cmd(port)}`
14
+ output.split("\n").map do |port|
17
15
  Integer(port)
18
16
  end
19
17
  end
18
+
19
+ def find_pids_cmd(port)
20
+ "lsof -i tcp:#{port} | grep '(LISTEN)' | awk '{print $2}'"
21
+ end
20
22
  end
21
23
  end
@@ -0,0 +1,44 @@
1
+ require "optparse"
2
+ require "rubygems"
3
+ require "eventmachine"
4
+ require "timeout"
5
+
6
+ $port = nil
7
+ $pid_file = nil
8
+ options ||= OptionParser.new do |o|
9
+ o.on('-p', '--port=PORT') do |port_from_user|
10
+ $port = Integer(port_from_user)
11
+ end
12
+
13
+ o.on('-f', '--pid_file=PID_FILE') do |pid_file_from_user|
14
+ $pid_file = pid_file_from_user
15
+ end
16
+ end
17
+ options.parse!
18
+
19
+ class NoopServer < EventMachine::Connection
20
+ end
21
+
22
+ def create_pid_file(pid_file)
23
+ File.open(pid_file, "w") do |file|
24
+ file.print Process.pid.to_s
25
+ end
26
+ end
27
+
28
+ EventMachine::run {
29
+ EventMachine::start_server "localhost", $port, NoopServer
30
+
31
+ create_pid_file "#{$pid_file}.pid"
32
+ fork do
33
+ create_pid_file "#{$pid_file}_1.pid"
34
+ sleep
35
+ end
36
+ fork do
37
+ create_pid_file "#{$pid_file}_2.pid"
38
+ sleep
39
+ end
40
+
41
+ Timeout.timeout(5) do
42
+ File.exists?("#{$pid_file}.pid") && File.exists?("#{$pid_file}_1.pid") && File.exists?("#{$pid_file}_2.pid")
43
+ end
44
+ }
@@ -3,9 +3,10 @@ require "#{File.dirname(__FILE__)}/spec_helper"
3
3
  describe Lsof do
4
4
  include WaitFor
5
5
  include FileUtils
6
- attr_reader :port, :pid_of_process
6
+ attr_reader :port, :process_pids
7
7
  before do
8
8
  @port = 6666
9
+ @process_pids = []
9
10
  end
10
11
 
11
12
  after do
@@ -18,26 +19,17 @@ describe Lsof do
18
19
 
19
20
  def start_process_using_port
20
21
  Thread.start do
21
- cmd = <<-CMD
22
- ruby -e '
23
- File.open("lsof.pid", "w") do |file|
24
- file.print Process.pid.to_s
25
- end
26
- require "rubygems"
27
- require "eventmachine"
28
- EventMachine::run do
29
- EventMachine::start_server "127.0.0.1", #{port}, EventMachine::Protocols::LineAndTextProtocol
30
- end
31
- '2>&1
32
- CMD
33
- `#{cmd}`
22
+ dir = File.dirname(__FILE__)
23
+ system("ruby #{dir}/fixtures/test_server.rb -p #{port} -f lsof")
34
24
  end
35
25
  wait_for do
36
26
  Lsof.running?(port)
37
27
  end
38
- @pid_of_process = Integer(File.read("lsof.pid"))
39
- pid_of_process.should_not be_nil
40
- pid_of_process.class.should == Fixnum
28
+ process_pids << Integer(File.read("lsof.pid"))
29
+ process_pids << Integer(File.read("lsof_1.pid"))
30
+ process_pids << Integer(File.read("lsof_2.pid"))
31
+ process_pids.compact!
32
+ process_pids.length.should == 3
41
33
  end
42
34
 
43
35
  def hide_error_stream
@@ -54,13 +46,15 @@ describe Lsof do
54
46
  end
55
47
 
56
48
  describe '.kill' do
57
- it "kills all processes associated with a provided port" do
58
- start_process_using_port
59
- hide_error_stream do
60
- Lsof.kill port
61
- end
62
- wait_for do
63
- !Lsof.running?(port)
49
+ describe "when there is only one process listening to the port" do
50
+ it "kills all processes associated with a provided port" do
51
+ start_process_using_port
52
+ hide_error_stream do
53
+ Lsof.kill port
54
+ end
55
+ wait_for do
56
+ !Lsof.running?(port)
57
+ end
64
58
  end
65
59
  end
66
60
  end
@@ -76,15 +70,15 @@ describe Lsof do
76
70
  end
77
71
  end
78
72
 
79
- describe ".listener_pid" do
80
- it "when there is a process listening on a port, returns the process id" do
73
+ describe ".listener_pids" do
74
+ it "when there is a process listening on a port, returns the process id in an Array" do
81
75
  start_process_using_port
82
- pid = Lsof.listener_pid(port)
83
- pid.should == pid_of_process
76
+ pids = Lsof.listener_pids(port)
77
+ pids.should == process_pids
84
78
  end
85
79
 
86
- it "when there is no process listening on a port, returns nil" do
87
- Lsof.listener_pid(port).should == nil
80
+ it "when there is no process listening on a port, returns []" do
81
+ Lsof.listener_pids(port).should == []
88
82
  end
89
83
  end
90
- end
84
+ end
metadata CHANGED
@@ -1,56 +1,64 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: lsof
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2007-12-28 00:00:00 -08:00
8
- summary: A library utilizing the lsof unix command for process management.
9
- require_paths:
10
- - lib
11
- email: corey@pivotallabs.com;brian@pivotallabs.com;
12
- homepage: http://pivotallabs.com
13
- rubyforge_project: pivotalrb
14
- description: A library utilizing the lsof unix command for process management.
15
- autorequire: lsof
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.2.0
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Corey Innis + Brian Takita
31
- files:
8
+ autorequire: lsof
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-04-22 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A library utilizing the lsof unix command for process management.
17
+ email: corey@pivotallabs.com;brian@pivotallabs.com;
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
32
24
  - CHANGES
25
+ files:
33
26
  - Rakefile
27
+ - CHANGES
34
28
  - README
35
29
  - lib/lsof.rb
36
- - spec/lsof_spec.rb
37
- - spec/spec_helper.rb
38
30
  - spec/spec_suite.rb
39
- test_files:
31
+ - spec/spec_helper.rb
32
+ - spec/fixtures/test_server.rb
40
33
  - spec/lsof_spec.rb
34
+ has_rdoc: true
35
+ homepage: http://pivotallabs.com
36
+ post_install_message:
41
37
  rdoc_options:
42
38
  - --main
43
39
  - README
44
40
  - --inline-source
45
41
  - --line-numbers
46
- extra_rdoc_files:
47
- - README
48
- - CHANGES
49
- executables: []
50
-
51
- extensions: []
52
-
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: "0"
49
+ version:
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ version:
53
56
  requirements: []
54
57
 
55
- dependencies: []
56
-
58
+ rubyforge_project: pivotalrb
59
+ rubygems_version: 1.1.0
60
+ signing_key:
61
+ specification_version: 2
62
+ summary: A library utilizing the lsof unix command for process management.
63
+ test_files:
64
+ - spec/lsof_spec.rb