Class AbstractOperatingSystem

java.lang.Object
oshi.software.common.AbstractOperatingSystem
All Implemented Interfaces:
OperatingSystem
Direct Known Subclasses:
AixOperatingSystem, DragonFlyBsdOperatingSystem, FreeBsdOperatingSystemJNA, LinuxOperatingSystem, MacOperatingSystem, NetBsdOperatingSystem, OpenBsdOperatingSystem, SolarisOperatingSystem, WindowsOperatingSystem

public abstract class AbstractOperatingSystem extends Object implements OperatingSystem
Common methods for OperatingSystem implementations
  • Field Details

    • USE_WHO_COMMAND

      protected static final boolean USE_WHO_COMMAND
      Whether to use the 'who' command for session queries.
  • Constructor Details

    • AbstractOperatingSystem

      protected AbstractOperatingSystem()
      Default constructor.
  • Method Details

    • getManufacturer

      public String getManufacturer()
      Description copied from interface: OperatingSystem
      Get the Operating System manufacturer.
      Specified by:
      getManufacturer in interface OperatingSystem
      Returns:
      the manufacturer
    • queryManufacturer

      protected abstract String queryManufacturer()
      Queries the OS manufacturer.
      Returns:
      the manufacturer string
    • getFamily

      public String getFamily()
      Description copied from interface: OperatingSystem
      Get the Operating System family.
      Specified by:
      getFamily in interface OperatingSystem
      Returns:
      the family
    • getVersionInfo

      public OperatingSystem.OSVersionInfo getVersionInfo()
      Description copied from interface: OperatingSystem
      Get Operating System version information.
      Specified by:
      getVersionInfo in interface OperatingSystem
      Returns:
      version information
    • queryFamilyVersionInfo

      protected abstract Pair<String, OperatingSystem.OSVersionInfo> queryFamilyVersionInfo()
      Queries the OS family and version info.
      Returns:
      a pair of family string and OS version info
    • getBitness

      public int getBitness()
      Description copied from interface: OperatingSystem
      Gets the bitness (32 or 64) of the operating system.
      Specified by:
      getBitness in interface OperatingSystem
      Returns:
      The number of bits supported by the operating system.
    • queryBitness

      protected abstract int queryBitness(int jvmBitness)
      Backup OS-specific query to determine bitness if previous checks fail
      Parameters:
      jvmBitness - The bitness of the JVM
      Returns:
      The operating system bitness
    • getProcesses

      public List<OSProcess> getProcesses(Predicate<OSProcess> filter, Comparator<OSProcess> sort, int limit)
      Description copied from interface: OperatingSystem
      Gets currently running processes, optionally filtering, sorting, and limited to the top "N".

      Example: get the top 10 processes by CPU usage:

      List<OSProcess> topCpu = os.getProcesses(ProcessFiltering.VALID_PROCESS, ProcessSorting.CPU_DESC, 10);
      
      Specified by:
      getProcesses in interface OperatingSystem
      Parameters:
      filter - An optional Predicate limiting the results to the specified filter. Some common predicates are available in OperatingSystem.ProcessFiltering. May be null for no filtering.
      sort - An optional Comparator specifying the sorting order. Some common comparators are available in OperatingSystem.ProcessSorting. May be null for no sorting.
      limit - Max number of results to return, or 0 to return all results
      Returns:
      A list of OSProcess objects, optionally filtered, sorted, and limited to the specified number.

      The list may contain processes with a state of OSProcess.State.INVALID if a process terminates during iteration.

    • queryAllProcesses

      protected abstract List<OSProcess> queryAllProcesses()
      Queries all processes on the system.
      Returns:
      a list of all OS processes
    • getChildProcesses

      public List<OSProcess> getChildProcesses(int parentPid, Predicate<OSProcess> filter, Comparator<OSProcess> sort, int limit)
      Description copied from interface: OperatingSystem
      Gets currently running child processes of provided parent PID, optionally filtering, sorting, and limited to the top "N".
      Specified by:
      getChildProcesses in interface OperatingSystem
      Parameters:
      parentPid - The Process ID whose children to list.
      filter - An optional Predicate limiting the results to the specified filter. Some common predicates are available in OperatingSystem.ProcessSorting. May be null for no filtering.
      sort - An optional Comparator specifying the sorting order. Some common comparators are available in OperatingSystem.ProcessSorting. May be null for no sorting.
      limit - Max number of results to return, or 0 to return all results
      Returns:
      A list of OSProcess objects representing the currently running child processes of the provided PID, optionally filtered, sorted, and limited to the specified number.

      The list may contain processes with a state of OSProcess.State.INVALID if a process terminates during iteration.

    • queryChildProcesses

      protected abstract List<OSProcess> queryChildProcesses(int parentPid)
      Queries the children of a process.
      Parameters:
      parentPid - the parent process ID
      Returns:
      a list of child processes (including the parent itself)
    • getDescendantProcesses

      public List<OSProcess> getDescendantProcesses(int parentPid, Predicate<OSProcess> filter, Comparator<OSProcess> sort, int limit)
      Description copied from interface: OperatingSystem
      Gets currently running processes of provided parent PID's descendants, including their children, the children's children, etc., optionally filtering, sorting, and limited to the top "N".
      Specified by:
      getDescendantProcesses in interface OperatingSystem
      Parameters:
      parentPid - The Process ID whose children to list.
      filter - An optional Predicate limiting the results to the specified filter. Some common predicates are available in OperatingSystem.ProcessSorting. May be null for no filtering.
      sort - An optional Comparator specifying the sorting order. Some common comparators are available in OperatingSystem.ProcessSorting. May be null for no sorting.
      limit - Max number of results to return, or 0 to return all results
      Returns:
      A list of OSProcess objects representing the currently running descendant processes of the provided PID, optionally filtered, sorted, and limited to the specified number.

      The list may contain processes with a state of OSProcess.State.INVALID if a process terminates during iteration.

    • queryDescendantProcesses

      protected abstract List<OSProcess> queryDescendantProcesses(int parentPid)
      Queries the descendants of a process.
      Parameters:
      parentPid - the parent process ID
      Returns:
      a list of descendant processes (including the parent itself)
    • getChildrenOrDescendants

      protected static Set<Integer> getChildrenOrDescendants(Collection<OSProcess> allProcs, int parentPid, boolean allDescendants)
      Utility method for subclasses to take a full process list as input and return the children or descendants of a particular process. The process itself is also returned to more efficiently extract its start time for filtering
      Parameters:
      allProcs - A collection of all processes
      parentPid - The process ID whose children or descendants to return
      allDescendants - If false, only gets immediate children of this process. If true, gets all descendants.
      Returns:
      Set of children or descendants of parentPid
    • getChildrenOrDescendants

      protected static Set<Integer> getChildrenOrDescendants(Map<Integer,Integer> parentPidMap, int parentPid, boolean allDescendants)
      Utility method for subclasses to take a map of pid to parent as input and return the children or descendants of a particular process.
      Parameters:
      parentPidMap - a map of all processes with processID as key and parentProcessID as value
      parentPid - The process ID whose children or descendants to return
      allDescendants - If false, only gets immediate children of this process. If true, gets all descendants.
      Returns:
      Set of children or descendants of parentPid, including the parent
    • isElevated

      public boolean isElevated()
      Description copied from interface: OperatingSystem
      Determine whether the current process has elevated permissions such as sudo / Administrator
      Specified by:
      isElevated in interface OperatingSystem
      Returns:
      True if this process has elevated permissions
    • getSessions

      public List<OSSession> getSessions()
      Description copied from interface: OperatingSystem
      Gets currently logged in users.

      On macOS, Linux, and Unix systems, the default implementation uses native code (see man getutxent) that is not thread safe. OSHI's use of this code is synchronized and may be used in a multi-threaded environment without introducing any additional conflicts. Users should note, however, that other operating system code may access the same native code.

      The Who#queryWho() method produces similar output parsing the output of the Posix-standard who command, and may internally employ reentrant code on some platforms. Users may opt to use this command-line variant by default using the oshi.os.unix.whocommand configuration property.

      Specified by:
      getSessions in interface OperatingSystem
      Returns:
      A list of OSSession objects representing logged-in users
    • getDesktopWindows

      public List<OSDesktopWindow> getDesktopWindows(boolean visibleOnly)
      Description copied from interface: OperatingSystem
      Gets windows on the operating system's GUI desktop.

      On Unix-like systems, reports X11 windows only, which may be limited to the current display and will not report windows used by other window managers.

      While not a guarantee, a best effort is made to return windows in foreground-to-background order. This ordering may be used along with OSDesktopWindow.getOrder() to (probably) determine the frontmost window.

      Specified by:
      getDesktopWindows in interface OperatingSystem
      Parameters:
      visibleOnly - Whether to restrict the list to only windows visible to the user.

      This is a best effort attempt at a reasonable definition of visibility. Visible windows may be completely transparent.

      Returns:
      A list of OSDesktopWindow objects representing the desktop windows.
    • toString

      public String toString()
      Overrides:
      toString in class Object