From: Matthieu Riou Date: 2007-07-07T14:18:00+09:00 Subject: Immediately terminating a pipe ------=_Part_36646_11768980.1183785482642 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, I'm opening a pipe and forking a command using popen3 to send it some data. However the data "accumulates" so even if I close the stream, the command continues running for a little while. In my case I'd like to find a way to stop it immediately. This explanation doesn't sound very clear so let me elaborate with an example. Say that I want to stream some music to mpg123 to get it played. I can do something like: require 'open3' mpg_in, mpg_out, mpg_err = Open3.popen3("mpg123 -q -") f = File.new("Placebo - Pure Morning.mp3") 200.times { mpg_in.write f.read(1024) } mpg_in.close You'll notice that the music continues playing after exiting the loop for a little while even though the input stream has been closed. I'd like it to stop immediately. I guess there must be a buffer or something. The only solution I've found so far is to kill the forked process (in that case mpg123) when I really want it to stop. And there's one more problem here: popen3 doesn't give you the forked process id . So I have to hack Open3 to give me the forked process id. Anybody has a better idea? Any more elegant alternative than killing? Thanks! Matthieu ------=_Part_36646_11768980.1183785482642--