Class AbstractProcOSProcess

java.lang.Object
oshi.software.common.AbstractOSProcess
oshi.software.common.os.unix.AbstractProcOSProcess
All Implemented Interfaces:
OSProcess
Direct Known Subclasses:
AixOSProcess, SolarisOSProcess

@ThreadSafe public abstract class AbstractProcOSProcess extends AbstractOSProcess
Abstract base for the /proc-filesystem Unix OSProcess implementations (Solaris and AIX). Both read process info from /proc, enumerate threads from /proc/<pid>/lwp, count open files from /proc/<pid>/fd, determine bitness from pflags, and fall back to a truncated command line. Subclasses supply their native argument/environment read, their OSThread factory, and their platform-specific updateAttributes().
  • Field Details

    • commandLineBackup

      protected String commandLineBackup
    • user

      protected String user
    • userID

      protected String userID
    • group

      protected String group
    • groupID

      protected String groupID
    • residentSetSize

      protected long residentSetSize
    • privateResidentMemory

      protected long privateResidentMemory
  • Constructor Details

    • AbstractProcOSProcess

      protected AbstractProcOSProcess(int pid)
  • Method Details

    • getCommandLine

      public String getCommandLine()
      Description copied from interface: OSProcess
      Gets the process command line used to start the process, including arguments if available to be determined. This method generally returns the same information as OSProcess.getArguments() in a more user-readable format, and is more robust to non-elevated access.

      The format of this string is platform-dependent, may be truncated, and may require the end user to parse the result. Users should generally prefer OSProcess.getArguments() which already parses the results, and use this method as a backup.

      On AIX and Solaris, the string may be truncated to 80 characters if there was insufficient permission to read the process memory.

      On Windows, attempts to retrieve the value from process memory, which requires that the process be owned by the same user as the executing process, or elevated permissions, and additionally requires the target process to have the same bitness (e.g., this will fail on a 32-bit process if queried by 64-bit and vice versa). If reading process memory fails, by default, performs a single WMI query for this process, with some latency. If this method will be frequently called for multiple processes, see the configuration file to enable a batch query mode to improve performance via caching, or configure the option via GlobalConfig before instantiating any OSProcess object.

      Returns:
      the process command line.
    • getArguments

      public List<String> getArguments()
      Description copied from interface: OSProcess
      Makes a best effort attempt to get a list of the the command-line arguments of the process. Returns the same information as OSProcess.getCommandLine() but parsed to a list. May require elevated permissions or same-user ownership.
      Returns:
      A list of Strings representing the arguments. May return an empty list if there was a failure (for example, because the process is already dead or permission was denied).
    • getEnvironmentVariables

      public Map<String,String> getEnvironmentVariables()
      Description copied from interface: OSProcess
      Makes a best effort attempt to obtain the environment variables of the process. May require elevated permissions or same-user ownership.
      Returns:
      A map representing the environment variables and their values. May return an empty map if there was a failure (for example, because the process is already dead or permission was denied).
    • getCurrentWorkingDirectory

      public String getCurrentWorkingDirectory()
      Description copied from interface: OSProcess
      Makes a best effort attempt to obtain the current working directory for the process.
      Returns:
      the process current working directory.
    • getUser

      public String getUser()
      Description copied from interface: OSProcess
      Gets the user name of the process owner.
      Returns:
      the user name. On Windows systems, also returns the domain prepended to the username.
    • getUserID

      public String getUserID()
      Description copied from interface: OSProcess
      Gets the user id of the process owner.
      Returns:
      the userID. On Windows systems, returns the Security ID (SID)
    • getGroup

      public String getGroup()
      Description copied from interface: OSProcess
      Gets the group under which the process is executing.

      On Windows systems, populating this value for processes other than the current user requires administrative privileges (and still may fail for some system processes) and can incur significant latency. When successful, returns a the default primary group with access to this process, corresponding to the SID in OSProcess.getGroupID().

      Returns:
      the group.
    • getGroupID

      public String getGroupID()
      Description copied from interface: OSProcess
      Gets the group id under which the process is executing.

      On Windows systems, populating this value for processes other than the current user requires administrative privileges (and still may fail for some system processes) and can incur significant latency. When successful, returns the default primary group SID with access to this process, corresponding to the name in OSProcess.getGroup().

      Returns:
      the groupID.
    • getResidentMemory

      public long getResidentMemory()
      Description copied from interface: OSProcess
      Returns the total amount of physical memory (RAM) currently mapped to the process's address space. This value represents the Resident Set Size (RSS) and includes both private memory and memory shared with other processes (such as shared libraries). This aligns with the reporting behavior of standard command-line utilities like ps and top.

      On Linux, returns the RSS value from /proc/[pid]/stat, which may be inaccurate because of a kernel-internal scalability optimization. If accurate values are required, read /proc/[pid]/smaps using FileUtil#getKeyValueMapFromFile(String, String).

      Returns:
      The resident set size in bytes.
    • getPrivateResidentMemory

      public long getPrivateResidentMemory()
      Description copied from interface: OSProcess
      Returns an estimate of the portion of physical memory (RAM) uniquely attributed to this process. This metric excludes shared libraries and other memory segments mapped by multiple processes, providing a more accurate representation of the process's individual impact on system resources. This value aligns with the primary "Memory" column in graphical system monitors, such as Windows Task Manager, macOS Activity Monitor, and the GNOME System Monitor.
      Returns:
      The private or "footprint" resident memory in bytes if available. Defaults to OSProcess.getResidentMemory() otherwise.
    • getOpenFiles

      public long getOpenFiles()
      Description copied from interface: OSProcess
      Gets the number of open file handles (or network connections) that belongs to the process.

      On FreeBSD and Solaris, this value is only populated if information for a single process id is requested.

      Returns:
      open files or -1 if unknown or not supported
    • getBitness

      public int getBitness()
      Description copied from interface: OSProcess
      Attempts to get the bitness (32 or 64) of the process.
      Returns:
      The bitness, if able to be determined, 0 otherwise.
    • getThreadDetails

      public List<OSThread> getThreadDetails()
      Description copied from interface: OSProcess
      Retrieves the threads of the process and their details.

      The amount of returned information is operating-system dependent and may incur some latency.

      Returns:
      a list of threads
    • queryCommandlineEnvironment

      protected abstract Pair<List<String>, Map<String,String>> queryCommandlineEnvironment()
      Reads this process's argument list and environment.
      Returns:
      a pair of (arg list, env map); either may be empty if it cannot be read
    • createThread

      protected abstract OSThread createThread(int lwpid)
      Creates a platform-specific OSThread for the given lwpid of this process.
      Parameters:
      lwpid - the thread (lwp) ID
      Returns:
      a new OSThread