Killing a thread

This code starts my application in a windows thread fine but the last
line does not kill the application that got fired up initially. How
come?

x = Thread.new do
system(‘app.exe’)
end
sleep 10
Thread.kill(x)

David

David S. wrote:

system(‘app.exe’)

This starts a subprocess which cannot be killed by killing the thread.
Use Kernel#spawn (that should work on Windows, too, I think) instead and
kill the subprocess:

pid = spawn(“app.exe”)
sleep 10
Process.kill(“KILL”, pid)

Note that you don’t need the thread anymore.

Marvin

PS: You may have a look here:
http://wiki.ruby-portal.de/Tricks#Externe_Programme_starten
:wink:

Doesn’t work on Windows.

irb(main):004:0> $pid = spawn(‘tftpd32.exe’)
NoMethodError: undefined method `spawn’ for main:Object
from (irb):4

Thought I needed popen4 but that gem didn’t make any difference.

Marvin Gülker wrote:

David S. wrote:

system(‘app.exe’)

This starts a subprocess which cannot be killed by killing the thread.
Use Kernel#spawn (that should work on Windows, too, I think) instead and
kill the subprocess:

pid = spawn(“app.exe”)
sleep 10
Process.kill(“KILL”, pid)

Note that you don’t need the thread anymore.

Marvin

PS: You may have a look here:
http://wiki.ruby-portal.de/Tricks#Externe_Programme_starten
:wink:

David S. wrote:

Doesn’t work on Windows.

irb(main):004:0> $pid = spawn(‘tftpd32.exe’)
NoMethodError: undefined method `spawn’ for main:Object
from (irb):4

Thought I needed popen4 but that gem didn’t make any difference.

Marvin Gülker wrote:

David S. wrote:

system(‘app.exe’)

This starts a subprocess which cannot be killed by killing the thread.
Use Kernel#spawn (that should work on Windows, too, I think) instead and
kill the subprocess:

pid = spawn(“app.exe”)
sleep 10
Process.kill(“KILL”, pid)

Note that you don’t need the thread anymore.

Marvin

PS: You may have a look here:
http://wiki.ruby-portal.de/Tricks#Externe_Programme_starten
:wink:

Oh, sorry. It’s some time ago since I last worked with processes on a
Windows system. You then may have a look at the win32-process gem from
the win32-utils project: http://rubyforge.org/projects/win32utils/

Hope that helps,

Marvin