module Signal

def self.list_trappable

Like Signal.list, but only returns signals that we can actually trap.
def self.list_trappable
	ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
	case ruby_engine
	when "jruby"
		result = Signal.list
		result.delete("QUIT")
		result.delete("ILL")
		result.delete("FPE")
		result.delete("KILL")
		result.delete("SEGV")
		result.delete("USR1")
		result.delete("IOT")
		result.delete("EXIT")
	else
		result = Signal.list
		result.delete("ALRM")
		result.delete("VTALRM")
	end
	
	# Don't touch SIGCHLD no matter what! On OS X waitpid() will
	# malfunction if SIGCHLD doesn't have a correct handler.
	result.delete("CLD")
	result.delete("CHLD")
	
	# Other stuff that we don't want to trap no matter which
	# Ruby engine.
	result.delete("STOP")
	
	return result
end