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

时间:2015-10-13 16:07:51

标签: java bash scala process pid

我需要检查当前是否正在使用Scala运行指定的进程。

我只有PID。

Scala是否具有内部功能,还是需要使用ps解析它?

谢谢。

3 个答案:

答案 0 :(得分:3)

您可以导入stowed<>

一般示例

sys.process._

获取进程scala的PID

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

有关详细信息,请参阅:http://www.scala-lang.org/api/current/index.html#scala.sys.process.package

答案 1 :(得分:1)

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

答案 2 :(得分:1)

Scala上运行Java 9时,我们可以利用Java的{​​{3}}的优势,这使得识别和使用本机进程更加容易:

ProcessHandle.of(5210) match { case p => p.isPresent && p.get.isAlive }

其中5210是您想要获取状态的进程的pid。

此:

  • 首先根据给定的Optional<ProcessHandle>创建一个Java pid

  • 如果该进程存在,则此Optional必须为present(这可能足以确定该进程是否处于活动状态,具体取决于系统)。

  • 最后使用ProcessHandle::isAlive检查该进程是否仍然存在。

ProcessHandlejava.lang的一部分,因此无需导入。