From: "nobu (Nobuyoshi Nakada) via ruby-core" Date: 2025-07-10T09:23:11+00:00 Subject: [ruby-core:122717] [Ruby Bug#21456] IO.close does not work in a rescue IO::TimeoutError block. Issue #21456 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Rejected dE (dE Techno) wrote: > not sure what signal it sends, it's undocumented No signal is sent. Send a signal by yourself if you want to stop the process. Since your example invokes a grand child process, add `pgroup` option and send "-signal" to the process group. ```ruby execArg = 'echo testwrite; sleep 10' tofuProcess = IO.popen(execArg, 'r', pgroup: true) ### puts 'executed tofu process.' tofuProcess.timeout=5 begin tofuOut = tofuProcess.read rescue IO::TimeoutError puts 'rescue occured' Process.kill "-TERM", tofuProcess.pid ### tofuProcess.close puts 'process closed' end ``` ---------------------------------------- Bug #21456: IO.close does not work in a rescue IO::TimeoutError block. https://bugs.ruby-lang.org/issues/21456#change-113994 * Author: dE (dE Techno) * Status: Rejected * ruby -v: ruby 3.2.8 (2025-03-26 revision 13f495dc2c) [x86_64-linux] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- 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 ``` -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/