Scala检查外部进程ID(pid)当前是否正在运行?
问题描述:
答
AFAIK,Java或Scala没有这样的功能。如果你是基于UNIX的机器,是的,你最好的选择是使用ps
命令。
您可以使用PID与ps
命令如下:
ps -p 8238 -o "pid="
这里PID是8283,我们要求ps
搜索它,如果它存在,只是打印出来。
scala> import sys.process._
import sys.process._
scala> def processExists(pid: Int) = pid == {try { (List("ps", "-p", s"$pid", "-o", "pid=") !!).trim.toInt } catch { case _: Throwable => -1 }}
warning: there was one feature warning; re-run with -feature for details
processExists: (pid: Int)Boolean
scala> val pid = 8238
pid: Int = 8238
scala> processExists(pid)
res11: Boolean = true
scala> processExists(1234)
res12: Boolean = false
答
可以导入sys.process._
一般例子
import sys.process._
scala> import sys.process._
import sys.process._
scala> "ps" !
PID TTY TIME CMD
570 ttys000 0:00.02 -bash
591 ttys000 0:00.01 bash /usr/local/bin/scala
得到的PID进程斯卡拉
// !! to get result as String
scala> "\\d+".r.findFirstIn("ps" #| "grep /usr/local/bin/scala" !!)
res9: Option[String] = Some(591)
获得更多的信息,请参阅:http://www.scala-lang.org/api/current/index.html#scala.sys.process.package
或检查是否存在'/ proc/{pid}'http://serverfault.com/questions/366474/whats-a-proper-way-of-checking-if-a-pid-is-running(不知道关于scala,但应该是一个1班轮通过常规file.exists api) – zapl
@zapl谢谢。这个解决方案如何与解析'ps'命令进行比较? – danielz
@zapl请注意,检查'/ proc/{pid}'是严格的linux解决方案(例如,它不会在osx上运行) –