aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/util/JvmUtil.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-11-27 16:04:05 +0100
committerLinnea Gräf <nea@nea.moe>2024-11-27 16:05:19 +0100
commitee0526ac67e093f77d17747d9316765b2db272a2 (patch)
tree1e2f8a26475afcc8c0d36b85068e1a2b282410ab /src/main/kotlin/util/JvmUtil.kt
parent9df1f12970dafdbf4cb13c76c1df1caed66f4a59 (diff)
downloadFirmament-ee0526ac67e093f77d17747d9316765b2db272a2.tar.gz
Firmament-ee0526ac67e093f77d17747d9316765b2db272a2.tar.bz2
Firmament-ee0526ac67e093f77d17747d9316765b2db272a2.zip
test: Use kotest
Diffstat (limited to 'src/main/kotlin/util/JvmUtil.kt')
-rw-r--r--src/main/kotlin/util/JvmUtil.kt32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/main/kotlin/util/JvmUtil.kt b/src/main/kotlin/util/JvmUtil.kt
new file mode 100644
index 0000000..5be5ebd
--- /dev/null
+++ b/src/main/kotlin/util/JvmUtil.kt
@@ -0,0 +1,32 @@
+package moe.nea.firmament.util
+
+import com.sun.tools.attach.VirtualMachine
+import java.lang.management.ManagementFactory
+import java.nio.file.Path
+import kotlin.io.path.absolutePathString
+
+object JvmUtil {
+ fun guessJVMPid(): String {
+ val name = ManagementFactory.getRuntimeMXBean().name
+ val pid = name.substringBefore('@')
+ ErrorUtil.softCheck("Not a valid PID: $pid", pid.toIntOrNull() != null)
+ return pid
+ }
+
+ fun getVM(): VirtualMachine {
+ return VirtualMachine.attach(guessJVMPid())
+ }
+
+ fun useVM(block: (VirtualMachine) -> Unit) {
+ val vm = getVM()
+ block(vm)
+ vm.detach()
+ }
+
+ fun loadAgent(jarPath: Path, options: String? = null) {
+ useVM {
+ it.loadAgent(jarPath.absolutePathString(), options)
+ }
+ }
+
+}