diff options
author | Linnea Gräf <nea@nea.moe> | 2024-11-27 16:04:05 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-11-27 16:05:19 +0100 |
commit | ee0526ac67e093f77d17747d9316765b2db272a2 (patch) | |
tree | 1e2f8a26475afcc8c0d36b85068e1a2b282410ab /src/main/kotlin/util/JvmUtil.kt | |
parent | 9df1f12970dafdbf4cb13c76c1df1caed66f4a59 (diff) | |
download | Firmament-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.kt | 32 |
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) + } + } + +} |