【发布时间】:2017-01-20 10:43:54
【问题描述】:
我的 Scala 脚本创建如下子进程:
val exitValue = Process(Seq("bash", "-c", command), dir) ! processLogger
命令是例如"mvn clean package" 或用于测试此问题 "sleep 20"。
由于某种原因,我的脚本必须拦截 SIGINT,因为用户可能指的是“复制”而不是“停止它”(确实时常发生)。我通过添加这样的信号处理程序来实现这一点:
Signal.handle(new Signal("INT"), this)
override def handle(sig: Signal)
{
log.warn("Ignoring SIGINT (Ctrl+C). Press [Esc] instead.")
}
但是,当子进程正在运行时,这不起作用,因为 CTRL+C 会使其停止。我该怎么做才能让子进程忽略 SIGINT?我找到了 Python 的解决方案: Python: How to prevent subprocesses from receiving CTRL-C / Control-C / SIGINT Scala 有类似的东西吗?
【问题讨论】:
标签: scala jvm subprocess signals sigint