我需要检查当前是否正在使用Scala运行指定的进程。
我只有PID。
Scala是否具有内部功能,还是需要使用ps
解析它?
谢谢。
答案 0 :(得分:3)
您可以导入stowed<>
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
有关详细信息,请参阅: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
检查该进程是否仍然存在。
ProcessHandle
是java.lang
的一部分,因此无需导入。