proc-wait3 1.9.1 → 1.9.2
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGES.md +6 -0
- data/README.md +32 -0
- data/Rakefile +6 -3
- data/examples/example_getrusage.rb +5 -3
- data/examples/example_pause.rb +7 -5
- data/examples/example_wait3.rb +5 -2
- data/examples/example_wait4.rb +5 -2
- data/examples/example_waitid.rb +5 -2
- data/ext/extconf.rb +6 -1
- data/ext/proc/wait3.c +7 -2
- data/lib/proc-wait3.rb +2 -0
- data/proc-wait3.gemspec +6 -3
- data/spec/proc_wait3_spec.rb +92 -84
- data.tar.gz.sig +0 -0
- metadata +32 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6e56b25dc085ce18c5808a81d259c4e9f54cb75d1ff985985bb5a575d58ed90
|
4
|
+
data.tar.gz: 65379d28529797369401cc65abb6c234b9cf1995ec7cf92152d03c03c6a89a83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51f2d1148e8fcadb8b9530420ac164e81b4645b04e3f7b8acded43a62acaa3000240f5e5e53b5fda4cc734f0e2f76edbf76d5b325c2cc3fefd450cf0f60ca519
|
7
|
+
data.tar.gz: ce1e71899e8db9c2c74bb5207d3a715e7cf8b355d0c5b6bc203b51608647d90fe53c0414bce48ee38c1c796987df7f9fa2b4a30c9eeebdd35900e34d288be82a
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 1.9.2 - 21-Apr-2024
|
2
|
+
* Added the P_JAILID constant for BSD platforms.
|
3
|
+
* Added some notes to the README for coping with EINTR.
|
4
|
+
* Added rubocop and rubocop-rspec as dev dependencies and did
|
5
|
+
some general rubocop cleanup.
|
6
|
+
|
1
7
|
## 1.9.1 - 8-Feb-2024
|
2
8
|
* Replace sigset with sigaction in the pause method.
|
3
9
|
* General cleanup and platform handling updates.
|
data/README.md
CHANGED
@@ -38,6 +38,38 @@ These methods may fail in conjunction with `fork` with `Errno::EINTR` unless
|
|
38
38
|
you pass the WNOHANG flag, or explicitly ignore the `SIGCHLD` signal. Ruby's
|
39
39
|
own `wait` methods appear to essentially be doing that behind the scenes.
|
40
40
|
|
41
|
+
Note that on some platforms just setting a `SIGCHLD` handler may not be
|
42
|
+
enough to prevent an `Errno::EINTR` from occuring since you can never be sure
|
43
|
+
what signal it's going to receive. Since this appears to be coming from the
|
44
|
+
guts of the Ruby core code itself IMO, it's somewhat out of my hands, but it's
|
45
|
+
not impossible to deal with.
|
46
|
+
|
47
|
+
A typical idiom would be to simulate the `TEMP_FAILURE_RETRY` macro that the GNU
|
48
|
+
library provides. This macro wraps a given function and retries it so long as
|
49
|
+
it doesn't fail, or the only failure is an `EINTR`. I've chosen not to integrate
|
50
|
+
this into the code directly (yet), but you can simulate it like so:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
require 'English'
|
54
|
+
|
55
|
+
begin
|
56
|
+
pid = fork{ sleep 1; exit 2 }
|
57
|
+
Process.wait3
|
58
|
+
rescue Errno::EINTR
|
59
|
+
retry
|
60
|
+
end
|
61
|
+
|
62
|
+
p $CHILD_STATUS
|
63
|
+
```
|
64
|
+
|
65
|
+
For more information please see:
|
66
|
+
|
67
|
+
https://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/Interrupted-Primitives.html
|
68
|
+
|
69
|
+
BSD provides another approach using sigaction handlers + `SA_RESTART`, but it requires knowing
|
70
|
+
the signal type in advance. So, unless you want to apply the same handler to *every* type of
|
71
|
+
signal, I don't find it especially useful.
|
72
|
+
|
41
73
|
## Integration with Ruby's process.c
|
42
74
|
I considered simply providing a patch to the core process.c file, but I
|
43
75
|
decided against it for two reasons. First, I wanted to get something
|
data/Rakefile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/clean'
|
3
3
|
require 'rspec/core/rake_task'
|
4
|
+
require 'rubocop/rake_task'
|
4
5
|
require 'fileutils'
|
5
6
|
require 'rbconfig'
|
6
7
|
include RbConfig
|
@@ -27,7 +28,7 @@ task :build => [:clean] do |t|
|
|
27
28
|
end
|
28
29
|
|
29
30
|
namespace :gem do
|
30
|
-
desc
|
31
|
+
desc 'Create the proc-wait3 gem'
|
31
32
|
task :create => [:clean] do
|
32
33
|
require 'rubygems/package'
|
33
34
|
spec = Gem::Specification.load('proc-wait3.gemspec')
|
@@ -35,7 +36,7 @@ namespace :gem do
|
|
35
36
|
Gem::Package.build(spec)
|
36
37
|
end
|
37
38
|
|
38
|
-
desc
|
39
|
+
desc 'Install the proc-wait3 gem'
|
39
40
|
task :install => [:create] do |t|
|
40
41
|
file = Dir['*.gem'].first
|
41
42
|
sh "gem install -l #{file}"
|
@@ -69,9 +70,11 @@ namespace :example do
|
|
69
70
|
end
|
70
71
|
end
|
71
72
|
|
72
|
-
desc
|
73
|
+
desc 'Run the test suite'
|
73
74
|
RSpec::Core::RakeTask.new(:spec) do |t|
|
74
75
|
t.rspec_opts = '-Iext'
|
75
76
|
end
|
76
77
|
|
77
78
|
task :default => [:build, :spec]
|
79
|
+
|
80
|
+
RuboCop::RakeTask.new
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################################
|
2
4
|
# example_getrusage.rb
|
3
5
|
#
|
@@ -11,7 +13,7 @@ require 'pp'
|
|
11
13
|
|
12
14
|
# Show resource stats for this process for 30 seconds
|
13
15
|
10.times do
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
pp Process.getrusage
|
17
|
+
puts '=' * 50
|
18
|
+
sleep 3
|
17
19
|
end
|
data/examples/example_pause.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#######################################################################
|
2
4
|
# example_pause.rb
|
3
5
|
#
|
@@ -9,13 +11,13 @@
|
|
9
11
|
require 'rbconfig'
|
10
12
|
require 'proc/wait3'
|
11
13
|
|
12
|
-
puts
|
14
|
+
puts 'Pausing. Hit Ctrl-C to continue.'
|
13
15
|
|
14
16
|
if RbConfig::CONFIG['host_os'] =~ /linux|darwin/i
|
15
|
-
|
17
|
+
Process.pause(2)
|
16
18
|
else
|
17
|
-
|
19
|
+
Process.pause('INT')
|
18
20
|
end
|
19
21
|
|
20
|
-
puts
|
21
|
-
puts
|
22
|
+
puts 'Hey, thanks for hitting Ctrl-C. Continuing...'
|
23
|
+
puts 'Done'
|
data/examples/example_wait3.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#######################################################################
|
2
4
|
# example_wait3.rb
|
3
5
|
#
|
@@ -6,10 +8,11 @@
|
|
6
8
|
#
|
7
9
|
# Modify as you see fit.
|
8
10
|
#######################################################################
|
11
|
+
require 'English'
|
9
12
|
require 'proc/wait3'
|
10
13
|
|
11
|
-
pid = fork{ sleep 1; exit 2 }
|
14
|
+
pid = fork { sleep 1; exit 2 }
|
12
15
|
|
13
16
|
p Time.now
|
14
17
|
Process.wait3
|
15
|
-
p
|
18
|
+
p $CHILD_STATUS
|
data/examples/example_wait4.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#######################################################################
|
2
4
|
# example_wait4.rb
|
3
5
|
#
|
@@ -6,9 +8,10 @@
|
|
6
8
|
#
|
7
9
|
# Modify as you see fit.
|
8
10
|
#######################################################################
|
11
|
+
require 'English'
|
9
12
|
require 'proc/wait3'
|
10
13
|
|
11
|
-
pid = fork{ sleep 2 }
|
14
|
+
pid = fork { sleep 2 }
|
12
15
|
p Time.now
|
13
16
|
Process.wait4(pid, Process::WUNTRACED)
|
14
|
-
p
|
17
|
+
p $CHILD_STATUS
|
data/examples/example_waitid.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#######################################################################
|
2
4
|
# example_waitid.rb
|
3
5
|
#
|
@@ -6,9 +8,10 @@
|
|
6
8
|
#
|
7
9
|
# Modify as you see fit.
|
8
10
|
#######################################################################
|
11
|
+
require 'English'
|
9
12
|
require 'proc/wait3'
|
10
13
|
|
11
|
-
pid = fork{ sleep 2 }
|
14
|
+
pid = fork { sleep 2 }
|
12
15
|
p Time.now
|
13
16
|
Process.waitid(Process::P_PID, pid, Process::WEXITED)
|
14
|
-
p
|
17
|
+
p $CHILD_STATUS
|
data/ext/extconf.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
########################################################
|
2
4
|
# Use the mkmf.rb file that I provide, so I can use the
|
3
5
|
# have_enum_member method
|
@@ -12,7 +14,7 @@ have_header('sys/wait.h')
|
|
12
14
|
|
13
15
|
# wait3 is mandatory.
|
14
16
|
unless have_func('wait3')
|
15
|
-
|
17
|
+
warn 'wait3() function not found'
|
16
18
|
exit
|
17
19
|
end
|
18
20
|
|
@@ -68,4 +70,7 @@ have_const('P_TASKID', 'signal.h')
|
|
68
70
|
# RUSAGE_THREAD is Linux-specific
|
69
71
|
have_const('RUSAGE_THREAD', 'sys/resource.h')
|
70
72
|
|
73
|
+
# BSD
|
74
|
+
have_const('P_JAILID', 'sys/wait.h')
|
75
|
+
|
71
76
|
create_makefile('proc/wait3', 'proc')
|
data/ext/proc/wait3.c
CHANGED
@@ -957,12 +957,17 @@ void Init_wait3(void)
|
|
957
957
|
rb_define_const(rb_mProcess, "P_PROJID", INT2FIX(P_PROJID));
|
958
958
|
#endif
|
959
959
|
|
960
|
+
#ifdef HAVE_CONST_P_JAILID
|
961
|
+
/* Process jail ID */
|
962
|
+
rb_define_const(rb_mProcess, "P_JAILID", INT2FIX(P_JAILID));
|
963
|
+
#endif
|
964
|
+
|
960
965
|
#ifdef HAVE_CONST_RUSAGE_THREAD
|
961
966
|
rb_define_const(rb_mProcess, "RUSAGE_THREAD", INT2FIX(RUSAGE_THREAD));
|
962
967
|
#endif
|
963
968
|
|
964
|
-
/* 1.9.
|
965
|
-
rb_define_const(rb_mProcess, "WAIT3_VERSION", rb_str_freeze(rb_str_new2("1.9.
|
969
|
+
/* 1.9.2: The version of the proc-wait3 library */
|
970
|
+
rb_define_const(rb_mProcess, "WAIT3_VERSION", rb_str_freeze(rb_str_new2("1.9.2")));
|
966
971
|
|
967
972
|
/* Define this last in our Init_wait3 function */
|
968
973
|
rb_define_readonly_variable("$last_status", &v_last_status);
|
data/lib/proc-wait3.rb
CHANGED
data/proc-wait3.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'proc-wait3'
|
5
|
-
spec.version = '1.9.
|
5
|
+
spec.version = '1.9.2'
|
6
6
|
spec.author = 'Daniel J. Berger'
|
7
7
|
spec.license = 'Apache-2.0'
|
8
8
|
spec.email = 'djberg96@gmail.com'
|
@@ -10,11 +10,13 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.summary = 'Adds wait3, wait4 and other methods to the Process module'
|
11
11
|
spec.test_file = 'spec/proc_wait3_spec.rb'
|
12
12
|
spec.extensions = ['ext/extconf.rb']
|
13
|
-
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
13
|
+
spec.files = Dir['**/*'].reject { |f| f.include?('git') }
|
14
14
|
spec.cert_chain = Dir['certs/*']
|
15
15
|
|
16
16
|
spec.add_development_dependency('rake')
|
17
17
|
spec.add_development_dependency('rspec', '~> 3.9')
|
18
|
+
spec.add_development_dependency('rubocop')
|
19
|
+
spec.add_development_dependency('rubocop-rspec')
|
18
20
|
|
19
21
|
spec.metadata = {
|
20
22
|
'homepage_uri' => 'https://github.com/djberg96/proc-wait3',
|
@@ -23,7 +25,8 @@ Gem::Specification.new do |spec|
|
|
23
25
|
'documentation_uri' => 'https://github.com/djberg96/proc-wait3/wiki',
|
24
26
|
'source_code_uri' => 'https://github.com/djberg96/proc-wait3',
|
25
27
|
'wiki_uri' => 'https://github.com/djberg96/proc-wait3/wiki',
|
26
|
-
'rubygems_mfa_required' => 'true'
|
28
|
+
'rubygems_mfa_required' => 'true',
|
29
|
+
'github_repo' => 'https://github.com/djberg96/proc-wait3'
|
27
30
|
}
|
28
31
|
|
29
32
|
spec.description = <<-EOF
|
data/spec/proc_wait3_spec.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#######################################################################
|
2
4
|
# proc_wait3_spec.rb
|
3
5
|
#
|
4
6
|
# Test suite for the Ruby proc-wait3 library. You should run these
|
5
7
|
# via the 'rake spec' task.
|
6
8
|
#######################################################################
|
9
|
+
require 'English'
|
7
10
|
require 'proc/wait3'
|
8
11
|
require 'rspec'
|
9
12
|
require 'rbconfig'
|
@@ -31,178 +34,178 @@ RSpec.describe Process do
|
|
31
34
|
@pid = nil
|
32
35
|
end
|
33
36
|
|
34
|
-
example
|
35
|
-
expect(Process::WAIT3_VERSION).to eq('1.9.
|
37
|
+
example 'version constant is set to expected value' do
|
38
|
+
expect(Process::WAIT3_VERSION).to eq('1.9.2')
|
36
39
|
expect(Process::WAIT3_VERSION).to be_frozen
|
37
40
|
end
|
38
41
|
|
39
|
-
example
|
40
|
-
expect(
|
42
|
+
example 'wait3 method is defined' do
|
43
|
+
expect(described_class).to respond_to(:wait3)
|
41
44
|
end
|
42
45
|
|
43
|
-
example
|
46
|
+
example 'wait3 works as expected' do
|
44
47
|
skip 'wait3 test skipped on this platform' if darwin
|
45
|
-
@pid = fork{ sleep 0.5 }
|
46
|
-
expect{
|
48
|
+
@pid = fork { sleep 0.5 }
|
49
|
+
expect { described_class.wait3 }.not_to raise_error
|
47
50
|
end
|
48
51
|
|
49
|
-
example
|
52
|
+
example 'wait3 returns the expected proc status members' do
|
50
53
|
skip 'wait3 test skipped on this platform' if darwin
|
51
|
-
@pid = fork{ sleep 0.5 }
|
52
|
-
expect{ @proc_stat =
|
53
|
-
expect(
|
54
|
+
@pid = fork { sleep 0.5 }
|
55
|
+
expect { @proc_stat = described_class.wait3 }.not_to raise_error
|
56
|
+
expect(@proc_stat.members).to eq(proc_stat_members)
|
54
57
|
end
|
55
58
|
|
56
|
-
example
|
57
|
-
@pid = fork{ sleep 0.5 }
|
58
|
-
expect{
|
59
|
+
example 'wait3 with WNOHANG works as expected' do
|
60
|
+
@pid = fork { sleep 0.5 }
|
61
|
+
expect { described_class.wait3(Process::WNOHANG) }.not_to raise_error
|
59
62
|
end
|
60
63
|
|
61
|
-
example
|
64
|
+
example 'wait3 sets and returns $last_status to expected values' do
|
62
65
|
skip 'wait3 test skipped on this platform' if darwin
|
63
|
-
@pid = fork{ sleep 0.5 }
|
64
|
-
|
65
|
-
expect($last_status).to
|
66
|
+
@pid = fork { sleep 0.5 }
|
67
|
+
described_class.wait3
|
68
|
+
expect($last_status).to be_a(Struct::ProcStat)
|
66
69
|
expect($last_status).not_to be_nil
|
67
70
|
end
|
68
71
|
|
69
|
-
example
|
72
|
+
example 'wait3 sets pid and status members of $?' do
|
70
73
|
skip 'wait3 test skipped on this platform' if darwin
|
71
|
-
@pid = fork{ sleep 0.5 }
|
72
|
-
|
73
|
-
expect(
|
74
|
+
@pid = fork { sleep 0.5 }
|
75
|
+
described_class.wait3
|
76
|
+
expect($CHILD_STATUS).not_to be_nil
|
74
77
|
end
|
75
78
|
|
76
|
-
example
|
79
|
+
example 'wait3 returns frozen struct' do
|
77
80
|
skip 'wait3 test skipped on this platform' if darwin
|
78
|
-
@pid = fork{ sleep 0.5 }
|
79
|
-
struct =
|
81
|
+
@pid = fork { sleep 0.5 }
|
82
|
+
struct = described_class.wait3
|
80
83
|
expect(struct).to be_frozen
|
81
84
|
end
|
82
85
|
|
83
|
-
example
|
86
|
+
example 'getdtablesize works as expected' do
|
84
87
|
skip 'getdtablesize skipped on this platform' unless solaris
|
85
88
|
|
86
|
-
expect(
|
87
|
-
expect(
|
88
|
-
assert(
|
89
|
+
expect(described_class).to respond_to(:getdtablesize)
|
90
|
+
expect(described_class.getdtablesize).to be_a(Integer)
|
91
|
+
assert(described_class.getdtablesize > 0)
|
89
92
|
end
|
90
93
|
|
91
|
-
example
|
94
|
+
example 'wait4 method is defined' do
|
92
95
|
skip 'wait4 test skipped on this platform' if hpux
|
93
|
-
expect(
|
96
|
+
expect(described_class).to respond_to(:wait4)
|
94
97
|
end
|
95
98
|
|
96
|
-
example
|
99
|
+
example 'wait4 requires at least one argument' do
|
97
100
|
skip 'wait4 test skipped on this platform' if hpux
|
98
|
-
expect{
|
101
|
+
expect { described_class.wait4 }.to raise_error(ArgumentError)
|
99
102
|
end
|
100
103
|
|
101
|
-
example
|
104
|
+
example 'wait4 works as expected' do
|
102
105
|
skip 'wait4 test skipped on this platform' if hpux || darwin
|
103
106
|
|
104
|
-
@pid = fork{ sleep 0.5 }
|
105
|
-
expect{ @proc_stat =
|
106
|
-
expect(@proc_stat).to
|
107
|
+
@pid = fork { sleep 0.5 }
|
108
|
+
expect { @proc_stat = described_class.wait4(@pid) }.not_to raise_error
|
109
|
+
expect(@proc_stat).to be_a(Struct::ProcStat)
|
107
110
|
end
|
108
111
|
|
109
|
-
example
|
112
|
+
example 'wait4 sets and returns $last_status to expected values' do
|
110
113
|
skip 'wait4 test skipped on this platform' if hpux || darwin
|
111
114
|
|
112
|
-
@pid = fork{ sleep 0.5 }
|
113
|
-
|
114
|
-
expect($last_status).to
|
115
|
+
@pid = fork { sleep 0.5 }
|
116
|
+
described_class.wait4(@pid)
|
117
|
+
expect($last_status).to be_a(Struct::ProcStat)
|
115
118
|
expect($last_status).not_to be_nil
|
116
119
|
end
|
117
120
|
|
118
|
-
example
|
121
|
+
example 'wait4 sets pid and status members of $?' do
|
119
122
|
skip 'wait4 test skipped on this platform' if hpux || darwin
|
120
123
|
|
121
|
-
@pid = fork{ sleep 0.5 }
|
122
|
-
|
123
|
-
expect(
|
124
|
+
@pid = fork { sleep 0.5 }
|
125
|
+
described_class.wait4(@pid)
|
126
|
+
expect($CHILD_STATUS).not_to be_nil
|
124
127
|
end
|
125
128
|
|
126
|
-
example
|
129
|
+
example 'wait4 returns frozen struct' do
|
127
130
|
skip 'wait4 test skipped on this platform' if hpux || darwin
|
128
131
|
|
129
|
-
@pid = fork{ sleep 0.5 }
|
130
|
-
struct =
|
132
|
+
@pid = fork { sleep 0.5 }
|
133
|
+
struct = described_class.wait4(@pid)
|
131
134
|
expect(struct).to be_frozen
|
132
135
|
end
|
133
136
|
|
134
|
-
example
|
137
|
+
example 'waitid method is defined' do
|
135
138
|
skip 'waitid test skipped on this platform' if hpux || darwin || bsd
|
136
139
|
|
137
|
-
expect(
|
140
|
+
expect(described_class).to respond_to(:waitid)
|
138
141
|
end
|
139
142
|
|
140
|
-
example
|
143
|
+
example 'waitid method works as expected' do
|
141
144
|
skip 'waitid test skipped on this platform' if hpux || darwin || bsd
|
142
145
|
|
143
|
-
@pid = fork{ sleep 0.5 }
|
144
|
-
expect{
|
146
|
+
@pid = fork { sleep 0.5 }
|
147
|
+
expect { described_class.waitid(Process::P_PID, @pid, Process::WEXITED) }.not_to raise_error
|
145
148
|
end
|
146
149
|
|
147
|
-
example
|
150
|
+
example 'waitid method raises expected errors if wrong argument type is passed' do
|
148
151
|
skip 'waitid test skipped on this platform' if hpux || darwin || bsd
|
149
152
|
|
150
|
-
@pid = fork{ sleep 0.5 }
|
151
|
-
expect{
|
152
|
-
expect{
|
153
|
-
expect{
|
153
|
+
@pid = fork { sleep 0.5 }
|
154
|
+
expect { described_class.waitid('foo', @pid, Process::WEXITED) }.to raise_error(TypeError)
|
155
|
+
expect { described_class.waitid(Process::P_PID, @pid, 'foo') }.to raise_error(TypeError)
|
156
|
+
expect { described_class.waitid(Process::P_PID, 'foo', Process::WEXITED) }.to raise_error(TypeError)
|
154
157
|
end
|
155
158
|
|
156
|
-
example
|
159
|
+
example 'waitid method raises expected error if invalid argument is passed' do
|
157
160
|
skip 'waitid test skipped on this platform' if hpux || darwin || bsd
|
158
161
|
|
159
|
-
@pid = fork{ sleep 0.5 }
|
160
|
-
expect{
|
162
|
+
@pid = fork { sleep 0.5 }
|
163
|
+
expect { described_class.waitid(Process::P_PID, 99999999, Process::WEXITED) }.to raise_error(Errno::ECHILD)
|
161
164
|
end
|
162
165
|
|
163
|
-
example
|
166
|
+
example 'sigsend method is defined' do
|
164
167
|
skip 'sigsend test skipped on this platform' unless solaris
|
165
168
|
|
166
|
-
expect(
|
169
|
+
expect(described_class).to respond_to(:sigsend)
|
167
170
|
end
|
168
171
|
|
169
|
-
example
|
172
|
+
example 'sigsend works as expected' do
|
170
173
|
skip 'sigsend test skipped on this platform' unless solaris
|
171
174
|
|
172
|
-
@pid = fork{ sleep 0.5 }
|
173
|
-
expect{
|
175
|
+
@pid = fork { sleep 0.5 }
|
176
|
+
expect { described_class.sigsend(Process::P_PID, @pid, 0) }.not_to raise_error
|
174
177
|
end
|
175
178
|
|
176
|
-
example
|
177
|
-
expect(
|
179
|
+
example 'getrusage method is defined' do
|
180
|
+
expect(described_class).to respond_to(:getrusage)
|
178
181
|
end
|
179
182
|
|
180
|
-
example
|
181
|
-
@pid = fork{ sleep 0.5 }
|
183
|
+
example 'getrusage works as expected' do
|
184
|
+
@pid = fork { sleep 0.5 }
|
182
185
|
|
183
|
-
expect{
|
184
|
-
expect{
|
186
|
+
expect { described_class.getrusage }.not_to raise_error
|
187
|
+
expect { described_class.getrusage(true) }.not_to raise_error
|
185
188
|
end
|
186
189
|
|
187
|
-
example
|
190
|
+
example 'getrusage can get thread info on Linux' do
|
188
191
|
skip 'getrusage only tested on Linux' unless linux
|
189
|
-
expect{
|
192
|
+
expect { described_class.getrusage(Process::RUSAGE_THREAD) }.not_to raise_error
|
190
193
|
end
|
191
194
|
|
192
|
-
example
|
195
|
+
example 'getrusage returns the expected struct' do
|
193
196
|
skip 'getrusage only tested on Linux' unless linux
|
194
197
|
|
195
|
-
@pid = fork{ sleep 0.5 }
|
196
|
-
expect(
|
197
|
-
expect(
|
198
|
-
expect(
|
198
|
+
@pid = fork { sleep 0.5 }
|
199
|
+
expect(described_class.getrusage).to be_a(Struct::RUsage)
|
200
|
+
expect(described_class.getrusage.stime).to be_a(Float)
|
201
|
+
expect(described_class.getrusage.utime).to be_a(Float)
|
199
202
|
end
|
200
203
|
|
201
|
-
example
|
202
|
-
expect(
|
204
|
+
example 'pause method is defined' do
|
205
|
+
expect(described_class).to respond_to(:pause)
|
203
206
|
end
|
204
207
|
|
205
|
-
example
|
208
|
+
example 'expected constants are defined' do
|
206
209
|
skip 'wait constant check skipped on this platform' if darwin || bsd
|
207
210
|
|
208
211
|
expect(Process::WCONTINUED).not_to be_nil
|
@@ -214,7 +217,7 @@ RSpec.describe Process do
|
|
214
217
|
expect(Process::WTRAPPED).not_to be_nil
|
215
218
|
end
|
216
219
|
|
217
|
-
example
|
220
|
+
example 'expected process type flag constants are defined' do
|
218
221
|
skip 'process type flag check skipped on this platform' if linux || darwin || bsd
|
219
222
|
|
220
223
|
expect(Process::P_ALL).not_to be_nil
|
@@ -229,13 +232,18 @@ RSpec.describe Process do
|
|
229
232
|
expect(Process::P_MYID).not_to be_nil
|
230
233
|
end
|
231
234
|
|
232
|
-
example
|
235
|
+
example 'solaris-specific process type flags are defined on solaris' do
|
233
236
|
skip 'P_TASKID and P_PROJID constant check skipped on this platform' unless solaris
|
234
237
|
|
235
238
|
expect(Process::P_TASKID).not_to be_nil
|
236
239
|
expect(Process::P_PROJID).not_to be_nil
|
237
240
|
end
|
238
241
|
|
242
|
+
example 'bsd-specific process type flags are defined on BSD platforms' do
|
243
|
+
skip 'P_JAILID constant check skipped on this platform' unless bsd
|
244
|
+
expect(Process::P_JAILID).not_to be_nil
|
245
|
+
end
|
246
|
+
|
239
247
|
def after
|
240
248
|
Process.kill(9, @pid) if @pid
|
241
249
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proc-wait3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
36
36
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2024-
|
38
|
+
date: 2024-04-21 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: rake
|
@@ -65,6 +65,34 @@ dependencies:
|
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '3.9'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rubocop
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rubocop-rspec
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
68
96
|
description: |2
|
69
97
|
The proc-wait3 library adds the wait3, wait4, waitid, pause, sigsend,
|
70
98
|
and getrusage methods to the Process module.
|
@@ -103,6 +131,7 @@ metadata:
|
|
103
131
|
source_code_uri: https://github.com/djberg96/proc-wait3
|
104
132
|
wiki_uri: https://github.com/djberg96/proc-wait3/wiki
|
105
133
|
rubygems_mfa_required: 'true'
|
134
|
+
github_repo: https://github.com/djberg96/proc-wait3
|
106
135
|
post_install_message:
|
107
136
|
rdoc_options: []
|
108
137
|
require_paths:
|
@@ -118,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
147
|
- !ruby/object:Gem::Version
|
119
148
|
version: '0'
|
120
149
|
requirements: []
|
121
|
-
rubygems_version: 3.
|
150
|
+
rubygems_version: 3.3.26
|
122
151
|
signing_key:
|
123
152
|
specification_version: 4
|
124
153
|
summary: Adds wait3, wait4 and other methods to the Process module
|
metadata.gz.sig
CHANGED
Binary file
|