sys-proctree 0.0.6 → 0.0.7
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.
- checksums.yaml +4 -4
- data/lib/sys/proctree/process.rb +2 -2
- data/lib/sys/proctree/tree.rb +1 -1
- data/lib/sys/proctree/version.rb +1 -1
- data/spec/lib/sys/proctree/process_spec.rb +15 -15
- data/spec/lib/sys/proctree/process_status_list_spec.rb +6 -6
- data/spec/lib/sys/proctree/tree_spec.rb +9 -11
- data/spec/lib/sys/proctree_spec.rb +3 -3
- data/spec/process_integration_spec.rb +3 -3
- data/spec/process_spec.rb +2 -2
- metadata +65 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df1c8486d02bbbe9244591fb6e80b3bba302fb98
|
4
|
+
data.tar.gz: d7d747fc7f315e3b3dc89ee426ec72db42404f42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 845c50ea5351baf0da3fa57d8ade1d4206ccc8cd3a6c589decde5fa435e27df54ed7aa4568c8a6d6d3895113b0b9168ee771c9e3bf317e79592abfdb72c05848
|
7
|
+
data.tar.gz: 4e6f5d069516106cfc1de331144aa40ca3e314b6350b3b9b7d5b91edefb8e944520648d7606abef1babd30d91b9215c80c031158003e19a95686b923ce55c1a4
|
data/lib/sys/proctree/process.rb
CHANGED
@@ -5,12 +5,12 @@ module Sys
|
|
5
5
|
|
6
6
|
def kill_tree(signal, pid)
|
7
7
|
pids = ::Sys::ProcTree::Tree.find(pid)
|
8
|
-
pids.
|
8
|
+
pids.map do |pid|
|
9
9
|
begin
|
10
10
|
::Process.kill(signal, pid)
|
11
11
|
::Process.wait(pid)
|
12
12
|
rescue
|
13
|
-
[pid, nil]
|
13
|
+
[ pid, nil ]
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
data/lib/sys/proctree/tree.rb
CHANGED
data/lib/sys/proctree/version.rb
CHANGED
@@ -9,57 +9,57 @@ describe ::Sys::ProcTree::Process do
|
|
9
9
|
let(:kill_signal) { 7 }
|
10
10
|
let(:tree_pids) { [2, 6, 8] }
|
11
11
|
|
12
|
-
before(:
|
13
|
-
::Sys::ProcTree::Tree.
|
14
|
-
::Process.
|
15
|
-
::Process.
|
12
|
+
before(:example) do
|
13
|
+
allow(::Sys::ProcTree::Tree).to receive(:find).and_return([2, 6, 8])
|
14
|
+
allow(::Process).to receive(:kill)
|
15
|
+
allow(::Process).to receive(:wait)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should discover the pids of the process tree" do
|
19
|
-
::Sys::ProcTree::Tree.
|
19
|
+
expect(::Sys::ProcTree::Tree).to receive(:find).with(8).and_return(tree_pids)
|
20
20
|
|
21
21
|
TestableProcess.kill_tree(kill_signal, 8)
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should attempt to kill each process with the provided kill signal in tree order" do
|
25
|
-
tree_pids.each { |pid| ::Process.
|
25
|
+
tree_pids.each { |pid| expect(::Process).to receive(:kill).with(kill_signal, pid) }
|
26
26
|
|
27
27
|
TestableProcess.kill_tree(kill_signal, 8)
|
28
28
|
end
|
29
29
|
|
30
30
|
|
31
31
|
it "should wait for all processes to complete" do
|
32
|
-
tree_pids.each { |pid| ::Process.
|
32
|
+
tree_pids.each { |pid| expect(::Process).to receive(:wait).with(pid) }
|
33
33
|
|
34
34
|
TestableProcess.kill_tree(kill_signal, 8)
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should return the exit status of all killed processes" do
|
38
38
|
wait_results = tree_pids.map do |pid|
|
39
|
-
[pid, double(Process::Status)].tap { |result| ::Process.
|
39
|
+
[pid, double(::Process::Status)].tap { |result| allow(::Process).to receive(:wait).with(pid).and_return(result) }
|
40
40
|
end
|
41
41
|
|
42
|
-
TestableProcess.kill_tree(kill_signal, 8).
|
42
|
+
expect(TestableProcess.kill_tree(kill_signal, 8)).to eql(wait_results)
|
43
43
|
end
|
44
44
|
|
45
45
|
describe "when a process has already been killed" do
|
46
46
|
|
47
47
|
let(:kill_signal) { 9 }
|
48
48
|
|
49
|
-
before(:
|
49
|
+
before(:example) { allow(::Process).to receive(:kill).with(kill_signal, 6).and_raise("No such process") }
|
50
50
|
|
51
51
|
it "should continue to kill subsequent processes" do
|
52
|
-
[2, 8].each { |pid| ::Process.
|
52
|
+
[2, 8].each { |pid| expect(::Process).to receive(:kill).with(kill_signal, pid) }
|
53
53
|
|
54
54
|
TestableProcess.kill_tree(kill_signal, 8)
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should return an exit status of nil" do
|
58
|
-
wait_results = [[2, double(Process::Status)], [6, nil], [8, double(Process::Status)]]
|
59
|
-
::Process.
|
60
|
-
::Process.
|
58
|
+
wait_results = [[2, double(::Process::Status)], [6, nil], [8, double(::Process::Status)]]
|
59
|
+
allow(::Process).to receive(:wait).with(2).and_return(wait_results[0])
|
60
|
+
allow(::Process).to receive(:wait).with(8).and_return(wait_results[2])
|
61
61
|
|
62
|
-
TestableProcess.kill_tree(kill_signal, 8).
|
62
|
+
expect(TestableProcess.kill_tree(kill_signal, 8)).to eql(wait_results)
|
63
63
|
end
|
64
64
|
|
65
65
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
describe ::Sys::ProcTree::ProcessStatusList do
|
2
2
|
|
3
|
-
before(:
|
3
|
+
before(:example) { allow(::Sys::ProcTable).to receive(:ps).and_return(proc_list) }
|
4
4
|
|
5
5
|
let(:proc_list) do
|
6
6
|
[double("ProcTableStruct", pid: 1, ppid: 2),
|
@@ -11,13 +11,13 @@ describe ::Sys::ProcTree::ProcessStatusList do
|
|
11
11
|
let(:list) { ::Sys::ProcTree::ProcessStatusList.new }
|
12
12
|
|
13
13
|
it "should be an array" do
|
14
|
-
list.
|
14
|
+
expect(list).to be_an(Array)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should contain proc table process status results" do
|
18
|
-
::Sys::ProcTable.
|
18
|
+
expect(::Sys::ProcTable).to receive(:ps).and_return(proc_list)
|
19
19
|
|
20
|
-
list.
|
20
|
+
expect(list).to eql(proc_list)
|
21
21
|
end
|
22
22
|
|
23
23
|
describe "exists?" do
|
@@ -27,7 +27,7 @@ describe ::Sys::ProcTree::ProcessStatusList do
|
|
27
27
|
let(:pid) { 2 }
|
28
28
|
|
29
29
|
it "should return true" do
|
30
|
-
list.exists?(pid).
|
30
|
+
expect(list.exists?(pid)).to be(true)
|
31
31
|
end
|
32
32
|
|
33
33
|
end
|
@@ -37,7 +37,7 @@ describe ::Sys::ProcTree::ProcessStatusList do
|
|
37
37
|
let(:pid) { -1 }
|
38
38
|
|
39
39
|
it "should return false" do
|
40
|
-
list.exists?(pid).
|
40
|
+
expect(list.exists?(pid)).to be(false)
|
41
41
|
end
|
42
42
|
|
43
43
|
end
|
@@ -4,9 +4,7 @@ describe ::Sys::ProcTree::Tree do
|
|
4
4
|
|
5
5
|
describe "#find" do
|
6
6
|
|
7
|
-
before(:
|
8
|
-
::Sys::ProcTree::ProcessStatusList.should_receive(:new).and_return(process_status_list)
|
9
|
-
end
|
7
|
+
before(:example) { allow(::Sys::ProcTree::ProcessStatusList).to receive(:new).and_return(process_status_list) }
|
10
8
|
|
11
9
|
let(:process_status_list) do
|
12
10
|
create_proc_table_entries([{ pid: 2, ppid: 1 },
|
@@ -21,7 +19,7 @@ describe ::Sys::ProcTree::Tree do
|
|
21
19
|
|
22
20
|
describe "when the provided process exists" do
|
23
21
|
|
24
|
-
before(:
|
22
|
+
before(:example) { allow(process_status_list).to receive(:exists?).with(pid).and_return(true) }
|
25
23
|
|
26
24
|
describe "when the tree is more than one level deep" do
|
27
25
|
|
@@ -29,8 +27,8 @@ describe ::Sys::ProcTree::Tree do
|
|
29
27
|
|
30
28
|
let(:pid) { 1 }
|
31
29
|
|
32
|
-
it "
|
33
|
-
tree.find(pid).
|
30
|
+
it "returns an array representing the tree in order from child first to parent last" do
|
31
|
+
expect(tree.find(pid)).to eql([3, 2, 1])
|
34
32
|
end
|
35
33
|
|
36
34
|
end
|
@@ -39,8 +37,8 @@ describe ::Sys::ProcTree::Tree do
|
|
39
37
|
|
40
38
|
let(:pid) { 6 }
|
41
39
|
|
42
|
-
it "
|
43
|
-
tree.find(pid).
|
40
|
+
it "returns an array containing processes order from child to parent, then as they appear in the underlying process table" do
|
41
|
+
expect(tree.find(pid)).to eql([5, 7, 8, 6])
|
44
42
|
end
|
45
43
|
|
46
44
|
end
|
@@ -51,10 +49,10 @@ describe ::Sys::ProcTree::Tree do
|
|
51
49
|
|
52
50
|
describe "when the provided process does not exist" do
|
53
51
|
|
54
|
-
before(:
|
52
|
+
before(:example) { allow(process_status_list).to receive(:exists?).and_return(false) }
|
55
53
|
|
56
|
-
it "
|
57
|
-
tree.find(0).
|
54
|
+
it "returns an empty array" do
|
55
|
+
expect(tree.find(0)).to be_empty
|
58
56
|
end
|
59
57
|
|
60
58
|
end
|
@@ -2,10 +2,10 @@ describe ::Sys::ProcTree do
|
|
2
2
|
|
3
3
|
describe "#find" do
|
4
4
|
|
5
|
-
it "
|
6
|
-
::Sys::ProcTree::Tree.
|
5
|
+
it "finds a tree via a Sys::ProcTree::Tree" do
|
6
|
+
allow(::Sys::ProcTree::Tree).to receive(:find).with(7).and_return([1, 3, 7])
|
7
7
|
|
8
|
-
::Sys::ProcTree.find(7).
|
8
|
+
expect(::Sys::ProcTree.find(7)).to eql([1, 3, 7])
|
9
9
|
end
|
10
10
|
|
11
11
|
end
|
@@ -10,7 +10,7 @@ describe ::Process, "integrating with real processes" do
|
|
10
10
|
|
11
11
|
let(:pid) { ::Process.spawn("irb") }
|
12
12
|
|
13
|
-
it "
|
13
|
+
it "kills the process" do
|
14
14
|
::Process.kill_tree(9, pid)
|
15
15
|
|
16
16
|
wait_until_killed([pid])
|
@@ -22,11 +22,11 @@ describe ::Process, "integrating with real processes" do
|
|
22
22
|
|
23
23
|
let(:ppid) { start_multiple_processes }
|
24
24
|
|
25
|
-
before(:
|
25
|
+
before(:example) do
|
26
26
|
wait_until_true("process tree has started") { ::Sys::ProcTree::Tree.find(ppid).length == 3 }
|
27
27
|
end
|
28
28
|
|
29
|
-
it "
|
29
|
+
it "kills all processes in the tree" do
|
30
30
|
tree_pids = ::Sys::ProcTree::Tree.find(ppid)
|
31
31
|
|
32
32
|
::Process.kill_tree(9, ppid)
|
data/spec/process_spec.rb
CHANGED
metadata
CHANGED
@@ -1,136 +1,142 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sys-proctree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Ueckerman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sys-proctable
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.9.0
|
20
|
+
- - "<="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.9.4
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
29
|
+
version: 0.9.0
|
30
|
+
- - "<="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.9.4
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: travis-lint
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - ~>
|
37
|
+
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
39
|
+
version: '2.0'
|
34
40
|
type: :development
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
|
-
- - ~>
|
44
|
+
- - "~>"
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
46
|
+
version: '2.0'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: metric_fu
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - ~>
|
51
|
+
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '4.
|
53
|
+
version: '4.11'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- - ~>
|
58
|
+
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '4.
|
60
|
+
version: '4.11'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: rspec
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
|
-
- - ~>
|
65
|
+
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: '2
|
67
|
+
version: '3.2'
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
|
-
- - ~>
|
72
|
+
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: '2
|
74
|
+
version: '3.2'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: os
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
|
-
- - ~>
|
79
|
+
- - "~>"
|
74
80
|
- !ruby/object:Gem::Version
|
75
81
|
version: '0.9'
|
76
82
|
type: :development
|
77
83
|
prerelease: false
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
79
85
|
requirements:
|
80
|
-
- - ~>
|
86
|
+
- - "~>"
|
81
87
|
- !ruby/object:Gem::Version
|
82
88
|
version: '0.9'
|
83
89
|
- !ruby/object:Gem::Dependency
|
84
90
|
name: rake
|
85
91
|
requirement: !ruby/object:Gem::Requirement
|
86
92
|
requirements:
|
87
|
-
- - ~>
|
93
|
+
- - "~>"
|
88
94
|
- !ruby/object:Gem::Version
|
89
|
-
version: '10.
|
95
|
+
version: '10.4'
|
90
96
|
type: :development
|
91
97
|
prerelease: false
|
92
98
|
version_requirements: !ruby/object:Gem::Requirement
|
93
99
|
requirements:
|
94
|
-
- - ~>
|
100
|
+
- - "~>"
|
95
101
|
- !ruby/object:Gem::Version
|
96
|
-
version: '10.
|
102
|
+
version: '10.4'
|
97
103
|
- !ruby/object:Gem::Dependency
|
98
104
|
name: simplecov
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
100
106
|
requirements:
|
101
|
-
- - ~>
|
107
|
+
- - "~>"
|
102
108
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0.
|
109
|
+
version: '0.9'
|
104
110
|
type: :development
|
105
111
|
prerelease: false
|
106
112
|
version_requirements: !ruby/object:Gem::Requirement
|
107
113
|
requirements:
|
108
|
-
- - ~>
|
114
|
+
- - "~>"
|
109
115
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0.
|
116
|
+
version: '0.9'
|
111
117
|
description: Discovers and kills process trees via process lists provided by the sys-proctable
|
112
118
|
gem
|
113
|
-
email: matthew.ueckerman@myob.com
|
119
|
+
email: " matthew.ueckerman@myob.com "
|
114
120
|
executables: []
|
115
121
|
extensions: []
|
116
122
|
extra_rdoc_files: []
|
117
123
|
files:
|
118
|
-
- ./lib/sys/proctree.rb
|
119
|
-
- ./lib/sys/proctree/process.rb
|
120
|
-
- ./lib/sys/proctree/process_status_list.rb
|
121
|
-
- ./lib/sys/proctree/tree.rb
|
122
|
-
- ./lib/sys/proctree/version.rb
|
123
|
-
- ./spec/lib/sys/proctree/process_spec.rb
|
124
|
-
- ./spec/lib/sys/proctree/process_status_list_spec.rb
|
125
|
-
- ./spec/lib/sys/proctree/tree_spec.rb
|
126
|
-
- ./spec/lib/sys/proctree_spec.rb
|
127
|
-
- ./spec/process_integration_spec.rb
|
128
|
-
- ./spec/process_spec.rb
|
129
|
-
- ./spec/resources/start_child.bat
|
130
|
-
- ./spec/resources/start_child.sh
|
131
|
-
- ./spec/resources/start_parent.bat
|
132
|
-
- ./spec/resources/start_parent.sh
|
133
|
-
- ./spec/spec_helper.rb
|
124
|
+
- "./lib/sys/proctree.rb"
|
125
|
+
- "./lib/sys/proctree/process.rb"
|
126
|
+
- "./lib/sys/proctree/process_status_list.rb"
|
127
|
+
- "./lib/sys/proctree/tree.rb"
|
128
|
+
- "./lib/sys/proctree/version.rb"
|
129
|
+
- "./spec/lib/sys/proctree/process_spec.rb"
|
130
|
+
- "./spec/lib/sys/proctree/process_status_list_spec.rb"
|
131
|
+
- "./spec/lib/sys/proctree/tree_spec.rb"
|
132
|
+
- "./spec/lib/sys/proctree_spec.rb"
|
133
|
+
- "./spec/process_integration_spec.rb"
|
134
|
+
- "./spec/process_spec.rb"
|
135
|
+
- "./spec/resources/start_child.bat"
|
136
|
+
- "./spec/resources/start_child.sh"
|
137
|
+
- "./spec/resources/start_parent.bat"
|
138
|
+
- "./spec/resources/start_parent.sh"
|
139
|
+
- "./spec/spec_helper.rb"
|
134
140
|
homepage: http://github.com/MYOB-Technology/sys-proctree
|
135
141
|
licenses:
|
136
142
|
- MIT
|
@@ -141,29 +147,29 @@ require_paths:
|
|
141
147
|
- lib
|
142
148
|
required_ruby_version: !ruby/object:Gem::Requirement
|
143
149
|
requirements:
|
144
|
-
- -
|
150
|
+
- - ">="
|
145
151
|
- !ruby/object:Gem::Version
|
146
152
|
version: 1.9.3
|
147
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
154
|
requirements:
|
149
|
-
- -
|
155
|
+
- - ">="
|
150
156
|
- !ruby/object:Gem::Version
|
151
157
|
version: '0'
|
152
158
|
requirements: []
|
153
159
|
rubyforge_project: sys-proctree
|
154
|
-
rubygems_version: 2.
|
160
|
+
rubygems_version: 2.4.6
|
155
161
|
signing_key:
|
156
162
|
specification_version: 4
|
157
163
|
summary: Discovers and can attempt to lay waste to a process tree
|
158
164
|
test_files:
|
159
|
-
- ./spec/lib/sys/proctree/process_spec.rb
|
160
|
-
- ./spec/lib/sys/proctree/process_status_list_spec.rb
|
161
|
-
- ./spec/lib/sys/proctree/tree_spec.rb
|
162
|
-
- ./spec/lib/sys/proctree_spec.rb
|
163
|
-
- ./spec/process_integration_spec.rb
|
164
|
-
- ./spec/process_spec.rb
|
165
|
-
- ./spec/resources/start_child.bat
|
166
|
-
- ./spec/resources/start_child.sh
|
167
|
-
- ./spec/resources/start_parent.bat
|
168
|
-
- ./spec/resources/start_parent.sh
|
169
|
-
- ./spec/spec_helper.rb
|
165
|
+
- "./spec/lib/sys/proctree/process_spec.rb"
|
166
|
+
- "./spec/lib/sys/proctree/process_status_list_spec.rb"
|
167
|
+
- "./spec/lib/sys/proctree/tree_spec.rb"
|
168
|
+
- "./spec/lib/sys/proctree_spec.rb"
|
169
|
+
- "./spec/process_integration_spec.rb"
|
170
|
+
- "./spec/process_spec.rb"
|
171
|
+
- "./spec/resources/start_child.bat"
|
172
|
+
- "./spec/resources/start_child.sh"
|
173
|
+
- "./spec/resources/start_parent.bat"
|
174
|
+
- "./spec/resources/start_parent.sh"
|
175
|
+
- "./spec/spec_helper.rb"
|