diff --git a/build.sc b/build.sc index b6f4228..819f6bb 100644 --- a/build.sc +++ b/build.sc @@ -26,9 +26,6 @@ def tmpDirBase = class Library(val crossScalaVersion: String) extends CrossScalaModule with LibDaemonPublish { def artifactName = "libdaemon" - def compileIvyDeps = super.compileIvyDeps() ++ Seq( - ivy"org.graalvm.nativeimage:svm:21.2.0" - ) def javacOptions = super.javacOptions() ++ Seq( "--release", "16" diff --git a/library/src/libdaemonjvm/internal/IsRunning.java b/library/src/libdaemonjvm/internal/IsRunning.java deleted file mode 100644 index eb154bf..0000000 --- a/library/src/libdaemonjvm/internal/IsRunning.java +++ /dev/null @@ -1,7 +0,0 @@ -package libdaemonjvm.internal; - -public class IsRunning { - public Boolean isRunning(int pid) { - return null; - } -} diff --git a/library/src/libdaemonjvm/internal/IsRunningSubst.java b/library/src/libdaemonjvm/internal/IsRunningSubst.java deleted file mode 100644 index d1b41a6..0000000 --- a/library/src/libdaemonjvm/internal/IsRunningSubst.java +++ /dev/null @@ -1,18 +0,0 @@ -package libdaemonjvm.internal; - -import com.oracle.svm.core.annotate.Substitute; -import com.oracle.svm.core.annotate.TargetClass; -import com.oracle.svm.core.posix.headers.Signal; -import org.graalvm.nativeimage.Platform; -import org.graalvm.nativeimage.Platforms; - -import java.nio.file.Path; - -@TargetClass(className = "libdaemonjvm.internal.IsRunning") -@Platforms({Platform.LINUX.class, Platform.DARWIN.class}) -final class IsRunningSubst { - @Substitute - Boolean isRunning(int pid) { - return Signal.kill(pid, 0) == 0; - } -} diff --git a/library/src/libdaemonjvm/internal/LockProcess.scala b/library/src/libdaemonjvm/internal/LockProcess.scala index 6e09a74..0dc6d70 100644 --- a/library/src/libdaemonjvm/internal/LockProcess.scala +++ b/library/src/libdaemonjvm/internal/LockProcess.scala @@ -8,13 +8,12 @@ trait LockProcess { object LockProcess { class Default extends LockProcess { def pid(): Int = - Option((new Pid).get()).map(n => (n: Int)).getOrElse { - sys.error("Cannot get PID") - } - def isRunning(pid: Int): Boolean = - Option((new IsRunning).isRunning(pid)).map(b => (b: Boolean)).getOrElse { - Processes.isRunning(pid) - } + ProcessHandle.current().pid().toInt + def isRunning(pid: Int): Boolean = { + val maybeHandle = ProcessHandle.of(pid) + if (maybeHandle.isEmpty) false + else maybeHandle.get.isAlive + } } def default: LockProcess = diff --git a/library/src/libdaemonjvm/internal/Pid.java b/library/src/libdaemonjvm/internal/Pid.java deleted file mode 100644 index 39cc7c8..0000000 --- a/library/src/libdaemonjvm/internal/Pid.java +++ /dev/null @@ -1,16 +0,0 @@ -package libdaemonjvm.internal; - -import java.lang.management.ManagementFactory; - -public class Pid { - public Integer get() { - try { - String name = ManagementFactory.getRuntimeMXBean().getName(); - int idx = name.indexOf('@'); - String pidStr = name.substring(0, idx); - return Integer.parseInt(pidStr); - } catch (NumberFormatException ex) { - return null; - } - } -} diff --git a/library/src/libdaemonjvm/internal/PidSubst.java b/library/src/libdaemonjvm/internal/PidSubst.java deleted file mode 100644 index 8f7240a..0000000 --- a/library/src/libdaemonjvm/internal/PidSubst.java +++ /dev/null @@ -1,18 +0,0 @@ -package libdaemonjvm.internal; - -import com.oracle.svm.core.annotate.Substitute; -import com.oracle.svm.core.annotate.TargetClass; -import com.oracle.svm.core.posix.headers.Unistd; -import org.graalvm.nativeimage.Platform; -import org.graalvm.nativeimage.Platforms; - -import java.nio.file.Path; - -@TargetClass(className = "libdaemonjvm.internal.Pid") -@Platforms({Platform.LINUX.class, Platform.DARWIN.class}) -final class PidSubst { - @Substitute - Integer get() { - return Unistd.getpid(); - } -} diff --git a/library/src/libdaemonjvm/internal/Processes.scala b/library/src/libdaemonjvm/internal/Processes.scala deleted file mode 100644 index 73e995c..0000000 --- a/library/src/libdaemonjvm/internal/Processes.scala +++ /dev/null @@ -1,32 +0,0 @@ -package libdaemonjvm.internal - -import scala.util.Properties -import scala.sys.process._ - -object Processes { - def isRunning(pid: Int): Boolean = { - val pids = - if (Properties.isWin) { - val output = Seq(System.getenv("WINDIR") + "\\system32\\tasklist.exe", "/fo", "list").!! - output - .linesIterator - .map(_.trim) - .filter(_.startsWith("PID:")) - .map(_.stripPrefix("PID:").trim) - .map(_.toInt) - .toSet - } - else { - val output = Seq("ps", "-e").!! - output - .linesIterator - .map(_.dropWhile(_.isSpaceChar)) - .filter(_.nonEmpty) - .filter(_.head.isDigit) - .map(_.takeWhile(_.isDigit)) - .map(_.toInt) - .toSet - } - pids.contains(pid) - } -}