diff --git a/lib/childprocess/process_spawn_process.rb b/lib/childprocess/process_spawn_process.rb index 11bd3a6..f1b22c6 100644 --- a/lib/childprocess/process_spawn_process.rb +++ b/lib/childprocess/process_spawn_process.rb @@ -54,6 +54,7 @@ def launch_process options[:out] = io.stdout ? io.stdout.fileno : File::NULL options[:err] = io.stderr ? io.stderr.fileno : File::NULL + reader = writer = nil if duplex? reader, writer = ::IO.pipe options[:in] = reader.fileno @@ -86,6 +87,11 @@ def launch_process @pid = ::Process.spawn(environment, *args, options) rescue SystemCallError => e raise LaunchError, e.message + ensure + unless @pid + reader&.close + writer&.close + end end if duplex?