我有一个使用套接字进行通信的 headless 应用程序。启动后,它会保持事件状态,直到发送一条消息告诉它退出(或者它崩溃或被杀死)。
当使用 Ruby 对该应用程序进行单元测试时,我需要启动该进程,与其交互(通过套接字),然后终止它。
我认为我可以使用这种模式来做到这一点:
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
但是,teardown
代码会终止线程,但不会终止线程启动的进程。
我怎样才能以这样的方式启动流程:
- 允许它在后台运行(立即将控制权返回给我的 Ruby 测试工具)
- 如果需要,允许我稍后强制终止进程。
我碰巧在 OS X 上进行开发,但如果可能的话,我希望有一个适用于所有运行 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
关于ruby - 杀死通过线程启动的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31758398/