mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
1d15d5f080
* Other ruby implementations use the spec/ruby directory. [Misc #13792] [ruby-core:82287] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
45 lines
1 KiB
Ruby
45 lines
1 KiB
Ruby
require 'thread'
|
|
|
|
pid_file = ARGV.shift
|
|
scenario = ARGV.shift
|
|
|
|
# We must do this first otherwise there will be a race with the process that
|
|
# creates this process and the TERM signal below could go to that process
|
|
# instead, which will likely abort the specs process.
|
|
Process.setsid if scenario
|
|
|
|
mutex = Mutex.new
|
|
|
|
Signal.trap(:TERM) do
|
|
if mutex.try_lock
|
|
STDOUT.puts "signaled"
|
|
STDOUT.flush
|
|
$signaled = true
|
|
end
|
|
end
|
|
|
|
File.open(pid_file, "wb") { |f| f.puts Process.pid }
|
|
|
|
if scenario
|
|
# We are sending a signal to the process group
|
|
process = "Process.getpgrp"
|
|
|
|
case scenario
|
|
when "self"
|
|
signal = %["SIGTERM"]
|
|
process = "0"
|
|
when "group_numeric"
|
|
signal = %[-Signal.list["TERM"]]
|
|
when "group_short_string"
|
|
signal = %["-TERM"]
|
|
when "group_full_string"
|
|
signal = %["-SIGTERM"]
|
|
else
|
|
raise "unknown scenario: #{scenario.inspect}"
|
|
end
|
|
|
|
code = "Process.kill(#{signal}, #{process})"
|
|
system(ENV["RUBY_EXE"], *ENV["RUBY_FLAGS"].split(' '), "-e", code)
|
|
end
|
|
|
|
sleep 0.001 until mutex.locked? and $signaled
|