Scala检查外部进程ID(pid)当前是否正在运行?

问题描述:

我需要检查指定的进程当前是否正在使用Scala运行。Scala检查外部进程ID(pid)当前是否正在运行?

我所拥有的就是PID。

Scala是否有内部函数,还是我需要使用ps解析它?

谢谢。

+0

或检查是否存在'/ proc/{pid}'http://serverfault.com/questions/366474/whats-a-proper-way-of-checking-if-a-pid-is-running(不知道关于scala,但应该是一个1班轮通过常规file.exists api) – zapl

+0

@zapl谢谢。这个解决方案如何与解析'ps'命令进行比较? – danielz

+1

@zapl请注意,检查'/ proc/{pid}'是严格的linux解决方案(例如,它不会在osx上运行) –

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 
+0

是的,我在一台Unix机器上。在Scala中解析'ps'的最简洁的方法是什么? – danielz

+0

用'def processExists(pid:Int)检查更新的答案' – tuxdna

可以导入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