Comments (4)
Thanks for opening an issue @soapy1!
Digging into this a little further, what I can see is that we set the DETACHED_PROCESS
flag passed to the CreateWindowsW
function call.
The Win32 API documentation for the DETACHED_PROCESS
flag suggests we are using it incorrectly. "Detach" in this context simply means the process isn't attached to the same console/terminal as the parent, whereas "detach" in the way ChildProcess uses it is more referring to the Process::detach
helper.
I unfortunately do not have easy access to a Windows machine at this time, but I wonder if simply calling Process::detach
in ChildProcess::Windows::ProcessBuilder.start
would do the trick. Since you are running this on Windows, would you be able to apply the following diff and running locally to see if it fixes your issue? It may not, as Process::detach
may be specific to Unix systems. Would happily accept a pull request if it works, however!
See lib/childprocess/windows/process_builder.rb
def start
create_command_pointer
create_environment_pointer
create_cwd_pointer
setup_flags
setup_io
pid = create_process
+ Process.detach(pid) if @detach
close_handles
pid
end
Appreciate your help!
from childprocess.
Thanks for digging into this!
I applied the patch and it looks like it returns an error.
C:\Users\vagrant\Desktop\test>ruby bug.rb
Parent process started
Traceback (most recent call last):
5: from bug.rb:4:in `<main>'
4: from bug.rb:20:in `<class:ProcessTest>'
3: from bug.rb:14:in `start'
2: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/childprocess-3.0.0/lib/childprocess/abstract_process.rb:81:in `start'
1: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/childprocess-3.0.0/lib/childprocess/windows/process.rb:70:in `launch_process'
C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/childprocess-3.0.0/lib/childprocess/windows/process_builder.rb:35:in `start': undefined method `detach' for ChildProcess::Windows::Process:Class (NoMethodError)
I made a slight modification to ::Process.detach(pid) if @detach
. This doesn't produce an error, however the problem persists.
from childprocess.
I dug into this a little more and I found that JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE is getting set. From the windows docs on managing jobs it looks like setting this flag will kill a child process when the parent terminates as part. Here is a little PR for not setting that flag if running in detached mode #167
from childprocess.
Thank you for digging into this and submitting a PR in #167. Closing as while we don't have any tests, I am assuming this solved the issue for you locally. Thanks again!
from childprocess.
Related Issues (20)
- Redirect to IO.pipe on Windows causes inability to start a process HOT 6
- Security Question: Is there a reason childprocess is released as an unsigned gem? HOT 2
- FFI is a required pre-requisite HOT 4
- Pipe i/o example in documentation is incorrect HOT 2
- Erro ao rodar o comando rspec -fd HOT 1
- FFI is a required pre-requisite for Windows or posix_spawn support in the ChildProcess gem. HOT 1
- A backend based on Process.spawn HOT 12
- Ruby 3.0 support HOT 10
- code hanging attempting to @thread.join HOT 1
- Should work for the M1 chip, but needs to be mapped or smth
- `host_cpu` changes between Ruby 2.7.2 and 2.7.3 HOT 2
- FFI installes but rake test get error HOT 4
- cannot load such file -- ffi (LoadError) HOT 2
- Use with StringIO HOT 1
- posix_spawn is not yet supported on aarch64-linux (aarch64-linux), HOT 2
- posix_spawn is not yet supported on sparc-solaris (sparc-solaris2.11) HOT 1
- I happen to be having this error after even having all both ruby, gem, and even chocolatey handy HOT 2
- Test suite is going to be broken with Ruby 3.3 HOT 1
- differences between macos and linux HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from childprocess.