From: muellerix@... (Michael Mueller) Date: 2003-11-17T10:59:22+09:00 Subject: Subprocess under Win32 Hello! Today I had some trouble with the app I'm working on. (Ruby 1.8.0 under Windows 2000). Basically I want to read in some data from the serial port and do some fancy stuff with that data.... Using the serialport-api I succeeded in reading in the data. However I have the problem, that the following call blocks the whole process until some data is read - unfortunately Ruby Threads won't help me in this situation... --- require "serialport/serialport.so" @sp = SerialPort.new(port, 19200, 8, 1, SerialPort::NONE) ... ... while(@continue) do zeile = @sp.gets #This blocks!!! #do someting end --- My app has a GUI and I want it to be responsive while waiting for the data I tried various approaches for fixing that problem. Since there is no fork() under Windows I used the "win32_popen"-library for spawning a new process: @serial_client_pid = IO.win32_popen3("serialreader.rb")[0].pid My idea was to put the serial-port-reading-related-stuff in this second ruby program in which I start a DRb-Server and and to fetch the data via DRb from the parent app. This sounds crazy and is imho really clumsy but it works! The last problem that I didn't get to solve is, that when I quit the app the second process won't get killed. I tried it with IO.win32_kill(@serial_client_pid) Unfortunately the PID I get from the win32_open3-method is NOT the PID of the second ruby-process but the PID of a "cmd"-Process (looked it up in the taskmgr). Killing this process won't kill the ruby-process. Do you guys have an idea how to solve this problem? Or is there even a much morge elegant solution without DRb??? (Maybe that part was just a mad idea...) Michael