From: nobu@... Date: 2014-12-11T08:22:26+00:00 Subject: [ruby-core:66776] [ruby-trunk - Bug #10583] [Feedback] Process.spawn stalls forever opening named pipes (fifo) Issue #10583 has been updated by Nobuyoshi Nakada. Status changed from Rejected to Feedback The current behavior is necessary to handle exec failures properly. Also, as it uses `vfork(2)` for huge memory apps if available, and it doesn't allow the parent and child processes to run in parallel. I think this issue is a rare case, and not worth to drop the feature by default. So what about a new `async` option? ---------------------------------------- Bug #10583: Process.spawn stalls forever opening named pipes (fifo) https://bugs.ruby-lang.org/issues/10583#change-50358 * Author: Justin Greer * Status: Feedback * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- Ruby's implementation of Process.spawn seems to attempt to send error/success information from the spawned process back to the parent, and the parent won't continue until it gets this information. However, a named pipe (fifo) is mapped to the spawned process' IO, it will stall opening the IO stream, and never be able to send the error/success status back to the parent. While stalled, the parent process is sitting here: https://github.com/ruby/ruby/blob/ruby_2_1/process.c#L3403 This prevents spawning multiple commands that communicate through a named pipe. Example testcase is attached. ---Files-------------------------------- spawn_bug_example.rb (486 Bytes) -- https://bugs.ruby-lang.org/