我正在使用ProcessBuilder启动子进程,并且如果父进程执行,则需要子进程退出.在正常情况下,我的代码正在正确地阻止孩子.但是,如果我导致操作系统杀死父级,则子级将继续运行.
有没有办法将子进程"绑定"到父进程,这样当父进程被杀时它会退出?
类似的问题:
如果我通过Java得到一个进程对象Runtime.getRuntime().exec(...),或者ProcessBuilder.start(),我可以等待它Process.waitFor(),就像是Thread.join(),或者我可以用它来杀死它Process.destroy(),就像被弃用的那样Thread.stop().
但是:我如何找到过程对象的pid?我在官方文档中没有看到这样做的方法.我可以用Java做到这一点吗?如果是这样,怎么样?
我想在我的SBT + Spray应用程序中添加一个集成测试阶段.
理想情况下,它就像Maven,具有以下阶段:
compile:该应用程序已构建test:运行单元测试pre-integration-test:该应用程序在单独的过程中启动integration-test:运行集成测试; 他们向在后台运行的应用程序发出请求,并验证是否返回了正确的结果post-integration-test:先前启动的应用程序实例已关闭我在使这个工作上遇到了很多麻烦.我能遵循一个有效的例子吗?
1)单独的"它"代码库:
我首先将SBT文档的"集成测试"部分中显示的代码添加到新文件中project/Build.scala.
这允许我在"src/it/scala"下添加一些集成测试,并使用"sbt it:test"运行它们,但我看不到如何添加一个pre-integration-test钩子.
问题" 确保'重新启动'任务自动在它之前运行:测试 "似乎解决了如何设置这样一个钩子,但答案对我不起作用(请参阅我的评论).
此外,将上述代码添加到我的build.scala已经停止了"sbt re-start"任务的工作:它尝试以"it"模式运行应用程序,而不是"默认"模式.
2)"测试"代码库中的集成测试:
我正在使用IntelliJ,而单独的"it"代码库确实让它感到困惑.它无法编译该目录中的任何代码,因为它认为缺少所有依赖项.
我尝试粘贴来自SBT文档的" 使用共享源的附加测试配置 "中的代码,但是我收到了编译错误:
[error] E:\Work\myproject\project\Build.scala:14: not found: value testOptions
[error] testOptions in Test := Seq(Tests.Filter(unitFilter)),
Run Code Online (Sandbox Code Playgroud)
我能遵循一个有效的例子吗?
我正在考虑放弃通过SBT设置它,而是添加一个测试标志,将测试标记为"集成"并编写外部脚本来处理这个问题.
如果我使用Scala Process/ProcessBuilder启动了一个进程.我怎样才能获得创建过程的pid?
我找不到PID提及任何官方文档: http://www.scala-lang.org/api/2.10.4/index.html#scala.sys.process.Process HTTP://www.scala -lang.org/api/2.10.4/index.html#scala.sys.process.ProcessBuilder http://www.scala-lang.org/api/2.10.4/index.html#scala.sys.process.包
我有代码,如果它失败,当前不会运行我的场景;
//Defined outside of the scenario scope
var simulationHealthy = true
//defined within the scenario
.exec((session: io.gatling.core.session.Session) => {
if (session.status == KO) {
simulationHealthy = false
}
session
})
Run Code Online (Sandbox Code Playgroud)
然而,我的模拟一直运行,直到模拟设置的持续时间结束,尽管场景不会继续执行。
我想要做的是让场景在我定义的条件下失败(类似于断言),并且整个模拟也在那一点失败,并生成报告。
谢谢
编辑:我在 IntelliJ IDE 中运行这些测试。需要以编程方式结束模拟。