Ruby 通过线程启动的Kill进程
我有一个无头应用程序,它使用套接字进行通信。启动时,它将保持活动状态,直到发送消息通知它退出(或它崩溃或被杀死) 当使用Ruby对这个应用程序进行单元测试时,我需要启动这个进程,与之交互(通过套接字),然后杀死它 我想我可以用这个模式来做:Ruby 通过线程启动的Kill进程,ruby,multithreading,unit-testing,process,Ruby,Multithreading,Unit Testing,Process,我有一个无头应用程序,它使用套接字进行通信。启动时,它将保持活动状态,直到发送消息通知它退出(或它崩溃或被杀死) 当使用Ruby对这个应用程序进行单元测试时,我需要启动这个进程,与之交互(通过套接字),然后杀死它 我想我可以用这个模式来做: class TestServer < MiniTest::Unit::TestCase def setup @thread = Thread.new{ `#{MY_COMMAND}` } end def test_aaa
class TestServer < MiniTest::Unit::TestCase
def setup
@thread = Thread.new{ `#{MY_COMMAND}` }
end
def test_aaa
# my test code
end
def teardown
@thread.kill if @thread
end
end
classtestserver
但是,该teardown
代码会终止线程,但不会终止由其启动的进程
我如何以以下方式启动流程:
我碰巧是在OSX上开发的,但如果可能的话,我希望有一个通用的解决方案可以在所有运行Ruby的操作系统上运行 您可以使用
Process.spawn
代替线程和反勾号:
class TestServer < MiniTest::Unit::TestCase
def setup
@pid = spawn "#{MY_COMMAND}"
end
def test_aaa
# my test code
end
def teardown
Process.kill('TERM', @pid) if @pid
end
end
classtestserver
谢谢!当你回答的时候,我发现这表明@pid=Process.fork{exec“my_command”}
。你能评论一下这两者之间的功能差异(如果有的话)吗?没关系,我也是。:)