Skip to content

Commit bd3d8c7

Browse files
Avoid calling "ps" from GraalVM native images (#8)
We can trivially call 'kill' (system call) there.
1 parent 7ea0c3f commit bd3d8c7

File tree

4 files changed

+28
-2
lines changed

4 files changed

+28
-2
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package libdaemonjvm.internal;
2+
3+
public class IsRunning {
4+
public Boolean isRunning(int pid) {
5+
return null;
6+
}
7+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package libdaemonjvm.internal;
2+
3+
import com.oracle.svm.core.annotate.Substitute;
4+
import com.oracle.svm.core.annotate.TargetClass;
5+
import com.oracle.svm.core.posix.headers.Signal;
6+
import org.graalvm.nativeimage.Platform;
7+
import org.graalvm.nativeimage.Platforms;
8+
9+
import java.nio.file.Path;
10+
11+
@TargetClass(className = "libdaemonjvm.internal.IsRunning")
12+
@Platforms({Platform.LINUX.class, Platform.DARWIN.class})
13+
final class IsRunningSubst {
14+
@Substitute
15+
Boolean isRunning(int pid) {
16+
return Signal.kill(pid, 0) == 0;
17+
}
18+
}

library/src/libdaemonjvm/internal/LockProcess.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ object LockProcess {
1212
sys.error("Cannot get PID")
1313
}
1414
def isRunning(pid: Int): Boolean =
15-
Processes.isRunning(pid)
15+
Option((new IsRunning).isRunning(pid)).map(b => (b: Boolean)).getOrElse {
16+
Processes.isRunning(pid)
17+
}
1618
}
1719

1820
def default: LockProcess =

library/src/libdaemonjvm/internal/PidSubst.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.oracle.svm.core.annotate.Substitute;
44
import com.oracle.svm.core.annotate.TargetClass;
5-
import com.oracle.svm.core.posix.headers.Signal;
65
import com.oracle.svm.core.posix.headers.Unistd;
76
import org.graalvm.nativeimage.Platform;
87
import org.graalvm.nativeimage.Platforms;

0 commit comments

Comments
 (0)