private Process createProcess() {
		String classPath = buildClasspath();

		// library path setup
		String envp[] = buildEnvironmentVariables();

		String java =
			System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";

		// optional: -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=18200
		try {
			Process p = Runtime.getRuntime().exec(
				new String[] { java, "-classpath", classPath, "-Xmx" + dmgServerMemoryMB + "m", //need more memory to load and xfer data across pipe
					"mobiledevices.dmg.server.DmgServer" },
				envp, null);
			return p;
		}
		catch (IOException e) {
			Msg.info(this, "Error when creating DMG sever process: ", e);
		}
		return null;
	}
Sends a command to the DMG server process.
<p>
ExpectedResults can be positive (ie. N result lines will be read from the
server process),
<li>0 (no result lines will be read),
<li>{@link Cmd#UNKNOWN_RESPONSE_COUNT UNKNOWN_RESPONSE_COUNT} const value
that indicates that the first response from the command will be the
number of following lines,
<li>or negative, meaning that an variable number of responses of size
abs(N) will be read from the server, where the first response from the
command is the variable number. In all, abs(N) * (first_response_int)
will be the total number of result lines returned.

@param cmdStr
@param expectedResults
@return
@throws IOException
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dmg/DmgServerProcessManager.java