package org.argeo.util; import java.io.File; import java.lang.management.ManagementFactory; /** When OS specific informations are needed. */ public class OS { public final static OS LOCAL = new OS(); private final String arch, name, version; /** The OS of the running JVM */ protected OS() { arch = System.getProperty("os.arch"); name = System.getProperty("os.name"); version = System.getProperty("os.version"); } public String getArch() { return arch; } public String getName() { return name; } public String getVersion() { return version; } public boolean isMSWindows() { // only MS Windows would use such an horrendous separator... return File.separatorChar == '\\'; } public String[] getDefaultShellCommand() { if (!isMSWindows()) return new String[] { "/bin/sh", "-l", "-i" }; else return new String[] { "cmd.exe", "/C" }; } public static Integer getJvmPid() { /* * This method works on most platforms (including Linux). Although when Java 9 * comes along, there is a better way: long pid = * ProcessHandle.current().getPid(); * * See: * http://stackoverflow.com/questions/35842/how-can-a-java-program-get-its-own- * process-id */ String pidAndHost = ManagementFactory.getRuntimeMXBean().getName(); return Integer.parseInt(pidAndHost.substring(0, pidAndHost.indexOf('@'))); } }