Bug #6131
closedCtrl-C handler do not work from exec process (Windows)
Description
Hello,
Originally reported to TheCodeShop group: https://groups.google.com/forum/?fromgroups#!topic/thecodeshop/ZI9FY-RKYgs
The usage of "rails server" uses exec
to spawn another process to run a server, and that process do not handle Ctrl-C.
Script to recreate this issue:
https://gist.github.com/2009356
=begin a.rb
trap(:INT) do
puts "Hit Ctrl+C in a.rb"
end
exec "ruby b.rb"
=end
=begin b.rb
trap(:INT) do
puts "Hit Ctrl+C in b.rb"
exit(false)
end
sleep
=end
Invoking b directly from command line works, but from a.rb it fails to respond to Ctrl-C
Files
Updated by shyouhei (Shyouhei Urabe) over 12 years ago
- Status changed from Open to Assigned
Updated by phasis68 (Heesob Park) over 12 years ago
As you may know, this bug is due to the Revision r34387.
If the CREATE_NEW_PROCESS_GROUP flag is specified in a call to the CreateProcess function, CTRL+C signal is disabled for all processes within the new process group.
I think r34387 is better to be reverted for compatibility with existing applications.
Updated by usa (Usaku NAKAMURA) over 12 years ago
- Assignee changed from usa (Usaku NAKAMURA) to h.shirosaki (Hiroshi Shirosaki)
r34389 (not 34387) is the revision.
Shirosaki-san, how do you think about this?
Updated by h.shirosaki (Hiroshi Shirosaki) over 12 years ago
How about removing CREATE_NEW_PROCESS_GROUP flag by default and providing a way to specify CREATE_NEW_PROCESS_GROUP flag by spawn methods's arguments?
Ruby user can specify CREATE_NEW_PROCESS_GROUP flag if it's needed.
spawn method has options
parameter hash.
spawn(command, options={}) -> Integer
spawn(env, command, options={}) -> Integer
spawn(env, program, *args, options={}) -> Integer
Specify options:
{ :creationflags => Process::CREATE_NEW_PROCESS_GROUP }
Python module does similar things.
http://docs.python.org/library/subprocess.html#subprocess.CREATE_NEW_PROCESS_GROUP
Updated by nobu (Nobuyoshi Nakada) over 12 years ago
h.shirosaki (Hiroshi Shirosaki) wrote:
Specify options:
{ :creationflags => Process::CREATE_NEW_PROCESS_GROUP }
Silly option. Should be 'new_process_group: true' or similar, at least.
Python module does similar things.
http://docs.python.org/library/subprocess.html#subprocess.CREATE_NEW_PROCESS_GROUP
Sigh.
Updated by h.shirosaki (Hiroshi Shirosaki) over 12 years ago
- File process.patch process.patch added
nobu (Nobuyoshi Nakada) wrote:
Should be 'new_process_group: true' or similar, at least.
How about new_pgroup: true
? :pgroup
option already exists and this is alike pgroup.
I created a patch attached.
- remove CREATE_NEW_PROCESS_GROUP flag by default
- add option
new_pgroup: true
to specify CREATE_NEW_PROCESS_GROUP flag
Any opinions?
Updated by h.shirosaki (Hiroshi Shirosaki) over 12 years ago
- Assignee changed from h.shirosaki (Hiroshi Shirosaki) to usa (Usaku NAKAMURA)
Assigned to usa-san for comments.
Updated by usa (Usaku NAKAMURA) over 12 years ago
Hello,
In message "[ruby-core:44154] [ruby-trunk - Bug #6131] Ctrl-C handler do not work from exec process (Windows)"
on Apr.06,2012 18:55:27, h.shirosaki@gmail.com wrote:
Assigned to usa-san for comments.
Oops, sorry, I overlooked.
I also considered the alternative plan, but I got no idea.
Let it go. Shirosaki-san, please commit it.
Regards,¶
U.Nakamura usa@garbagecollect.jp
Updated by luislavena (Luis Lavena) over 12 years ago
- Assignee changed from usa (Usaku NAKAMURA) to h.shirosaki (Hiroshi Shirosaki)
Hiroshi: will be good do this in two commits:
- First commit that reverts the usage of CREATE_NEW_PROCESS_GROUP, so can be backported to ruby_1_9_3 branch
- Implement new_pgroup option for spawn.
Thank you.
Updated by Anonymous over 12 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r35249.
Luis, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
-
test/ruby/test_thread.rb
(TestThreadGroup#test_thread_timer_and_interrupt): skip on Windows.
Process.kill cannot kill a subprocess if CREATE_NEW_PROCESS_GROUP
flag is not specified in a call to CreateProcessW(). -
win32/win32.c (CreateChild): revert the usage of
CREATE_NEW_PROCESS_GROUP flag for compatibility.
[ruby-core:43245][Bug #6131]
Updated by h.shirosaki (Hiroshi Shirosaki) over 12 years ago
Hi Luis,
Hiroshi: will be good do this in two commits:
- First commit that reverts the usage of CREATE_NEW_PROCESS_GROUP, so can be backported to ruby_1_9_3 branch
- Implement new_pgroup option for spawn.
I've committed this in two commits. Please check.