mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	rubyspec/core/io/popen_spec: avoid lingering "ruby -e sleep" process
The ruby_cmd helper blindly escapes code blocks passed to it,
causing "sleep" to be quoted in the command-line.  This quoting
results in IO.popen using a subshell (/bin/sh) to run the given
string command instead of invoking the Ruby executable directly.
Thus, IO.popen would only see the PID of the subshell via
IO#pid, and merely sending SIGKILL to the subshell would not
result in the child ("ruby -e sleep") being killed.
This problem with lingering ruby processes was easier to
reproduce on slow or heavily-loaded systems using low-scheduling
priority (e.g. "chrt -i 0 make test-rubyspec")
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58863 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
			
			
This commit is contained in:
		
							parent
							
								
									86c9a6d49b
								
							
						
					
					
						commit
						2e87ef8b66
					
				
					 1 changed files with 6 additions and 2 deletions
				
			
		|  | @ -74,8 +74,12 @@ describe "IO.popen" do | |||
|   end | ||||
| 
 | ||||
|   it "does not throw an exception if child exited and has been waited for" do | ||||
|     @io = IO.popen(ruby_cmd('sleep')) | ||||
|     Process.kill "KILL", @io.pid | ||||
|     # Avoid the /bin/sh subshell using :options and :args to sleep. | ||||
|     # We don't want to kill only the subshell and leave "ruby -e sleep" | ||||
|     # running indefinitely | ||||
|     @io = IO.popen(ruby_cmd(nil, :options => '-e', :args => 'sleep')) | ||||
|     pid = @io.pid | ||||
|     Process.kill "KILL", pid | ||||
|     @io.close | ||||
|     platform_is_not :windows do | ||||
|       $?.signaled?.should == true | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 normal
						normal