@ApiStatus.Internal
  public static @Nullable List<ProcessInfo> parseMacOutput(@NotNull String commandOnly,
                                                           @NotNull String full,
                                                           @Nullable String currentUser) {
    List<MacProcessInfo> commands = doParseMacOutput(commandOnly);
    List<MacProcessInfo> fulls = doParseMacOutput(full);
    if (commands == null || fulls == null) return null;

    Int2ObjectMap<String> idToCommand = new Int2ObjectOpenHashMap<>();
    for (MacProcessInfo each : commands) {
      idToCommand.put(each.pid, each.commandLine);
    }

    List<ProcessInfo> result = new ArrayList<>();
    for (MacProcessInfo each : fulls) {
      if (!idToCommand.containsKey(each.pid)) continue;

      String command = idToCommand.get(each.pid);
      if (!(each.commandLine.equals(command) || each.commandLine.startsWith(command + " "))) continue;

      String name = PathUtil.getFileName(command);
      String args = each.commandLine.substring(command.length()).trim();

      ThreeState isOwnedByCurrentUser = currentUser != null ? ThreeState.fromBoolean(currentUser.equals(each.user)) : ThreeState.UNSURE;
      result.add(new ProcessInfo(each.pid, each.commandLine, name, args, command, each.parentPid, each.user, isOwnedByCurrentUser));
    }
    return result;
  }
@ApiStatus.Internal
  public static @Nullable List<ProcessInfo> parseMacOutput(@NotNull String commandOnly,
                                                           @NotNull String full,
                                                           @Nullable String currentUser)