Project

General

Profile

Bug #21456

Updated by nobu (Nobuyoshi Nakada) 1 day ago

Invoking the close method on an IO object based on popen will forcefully close the process (not sure what signal it sends, it's undocumented), however when you handle a IO::TimeoutError exception (which you can get when you set .timeout), the close method fails to end the process. It's going to block until the process naturally terminates. 

 Sample code (linux based) --  
 ```ruby 
 execArg = 'echo testwrite; sleep 10' 
 tofuProcess = IO.popen(execArg, 'r') 
 puts 'executed tofu process.' 
 tofuProcess.timeout=5 
 begin 
	 tofuOut = tofuProcess.read 
 rescue IO::TimeoutError 
	 puts 'rescue occured' 
	 tofuProcess.close 
	 puts 'process closed' 
 end 
 ```

Back