Class BsdOSProcess
- All Implemented Interfaces:
OSProcess
- Direct Known Subclasses:
DragonFlyBsdOSProcess, FreeBsdOSProcess, NetBsdOSProcess, OpenBsdOSProcess
ps state
mapping, the cpuset affinity lookup, and the /proc/<pid>/limits fallback. Platform-specific work (the
ps attribute query, thread enumeration, cwd/open-file lookups, and the native argument/environment and
file-limit reads) is provided by the per-platform subclasses.-
Nested Class Summary
Nested classes/interfaces inherited from interface OSProcess
OSProcess.StateModifier and TypeInterfaceDescriptionstatic enumProcess and Thread Execution States -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Stringprotected Stringprotected Stringprotected longprotected longprotected longprotected longprotected Stringprotected Stringprotected longFields inherited from class AbstractOSProcess
bytesRead, bytesWritten, kernelTime, name, parentProcessID, path, priority, startTime, state, threadCount, upTime, userTime, virtualSizeModifier and TypeFieldDescriptionprotected longprotected longprotected longprotected Stringprotected intprotected Stringprotected intprotected longprotected OSProcess.Stateprotected intprotected longprotected longprotected long -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionlongGets the process affinity mask for this process.Makes a best effort attempt to get a list of the the command-line arguments of the process.intAttempts to get the bitness (32 or 64) of the process.Gets the process command line used to start the process, including arguments if available to be determined.Makes a best effort attempt to obtain the environment variables of the process.getGroup()Gets the group under which the process is executing.Gets the group id under which the process is executing.longThe number of involuntary context switches the process has made.longGets the number of major (hard) faults the process has made which have required loading a memory page from disk.longGets the number of minor (soft) faults the process has made which have not required loading a memory page from disk.protected static longgetProcessOpenFileLimit(long processId, int index) Parses the soft or hard open-file limit for another process from/proc/<pid>/limits.longReturns the total amount of physical memory (RAM) currently mapped to the process's address space.protected static OSProcess.StategetStateFromOutput(char stateValue) Maps apssingle-character state to anOSProcess.State.getUser()Gets the user name of the process owner.Gets the user id of the process owner.longThe number of voluntary context switches the process has made.protected abstract StringReturns the comma-separatedps -ocolumn list for this platform, derived frompsKeywords().protected abstract List<BsdPsKeyword> Returns this platform's orderedpscolumn keys, used both to build thepscommand and to parse its output positionally.Queries this process's argument list.protected abstract intQueries this process's bitness (32 or 64), or0if unknown.Queries this process's environment variables.protected longReturns this process's start time in epoch milliseconds, or-1to derive it from thepselapsed-time column.booleanAttempts to update process attributes.protected booleanupdateAttributes(Map<BsdPsKeyword, String> psMap) Populates this process's attributes from a parsedpsrow.protected voidMethods inherited from class AbstractOSProcess
getBytesRead, getBytesWritten, getKernelTime, getName, getParentProcessID, getPath, getPriority, getProcessCpuLoadBetweenTicks, getProcessCpuLoadCumulative, getProcessID, getStartTime, getState, getThreadCount, getUpTime, getUserTime, getVirtualSize, toStringModifier and TypeMethodDescriptionlongGets the bytes read by the process.longGets the bytes written by the process.longGets kernel/system (privileged) time used by the process.getName()Gets the name of the process, often the executable program.intGets the process ID of this process's parent.getPath()Gets the full filesystem path of the executing process.intGets the priority of this process.doublegetProcessCpuLoadBetweenTicks(OSProcess priorSnapshot) Gets CPU usage of this process since a previous snapshot of the same process, provided as a parameter.doubleGets cumulative CPU usage of this process.intGets the process ID.longGets the process start time.getState()Gets the process state.intGets the number of threads being executed by this process.longGets up time / elapsed time since the process started.longGets user time used by the process.longGets the Virtual Memory Size (VSZ).toString()Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface OSProcess
getContextSwitches, getCurrentWorkingDirectory, getHardOpenFileLimit, getOpenFiles, getPrivateResidentMemory, getSoftOpenFileLimit, getThreadDetailsModifier and TypeMethodDescriptiondefault longA snapshot of the context switches the process has done, equal to the sum ofOSProcess.getVoluntaryContextSwitches()andOSProcess.getInvoluntaryContextSwitches()on platforms that provide the split.Makes a best effort attempt to obtain the current working directory for the process.longGets the hard limit for open file handles (or network connections) that belong to the given process.longGets the number of open file handles (or network connections) that belongs to the process.default longReturns an estimate of the portion of physical memory (RAM) uniquely attributed to this process.longGets the soft limit for open file handles (or network connections) of the given process.Retrieves the threads of the process and their details.
-
Field Details
-
user
-
userID
-
group
-
groupID
-
residentSetSize
protected long residentSetSize -
minorFaults
protected long minorFaults -
majorFaults
protected long majorFaults -
voluntaryContextSwitches
protected long voluntaryContextSwitches -
involuntaryContextSwitches
protected long involuntaryContextSwitches -
commandLineBackup
-
-
Constructor Details
-
BsdOSProcess
protected BsdOSProcess(int pid)
-
-
Method Details
-
getCommandLine
Description copied from interface:OSProcessGets the process command line used to start the process, including arguments if available to be determined. This method generally returns the same information asOSProcess.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
GlobalConfigbefore instantiating anyOSProcessobject.- Returns:
- the process command line.
-
getArguments
Description copied from interface:OSProcessMakes a best effort attempt to get a list of the the command-line arguments of the process. Returns the same information asOSProcess.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
Description copied from interface:OSProcessMakes 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).
-
getUser
-
getUserID
-
getGroup
Description copied from interface:OSProcessGets 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
Description copied from interface:OSProcessGets 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:OSProcessReturns 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 likepsandtop.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]/smapsusingFileUtil#getKeyValueMapFromFile(String, String).- Returns:
- The resident set size in bytes.
-
getMinorFaults
public long getMinorFaults()Description copied from interface:OSProcessGets the number of minor (soft) faults the process has made which have not required loading a memory page from disk. Sometimes called reclaims.On Windows, this includes the total of major and minor faults.
Not available on AIX.
- Returns:
- minor page faults (reclaims).
-
getMajorFaults
public long getMajorFaults()Description copied from interface:OSProcessGets the number of major (hard) faults the process has made which have required loading a memory page from disk.Windows does not distinguish major and minor faults at the process level, so this value returns 0 and major faults are included in
OSProcess.getMinorFaults().Not available on AIX.
- Returns:
- major page faults.
-
getVoluntaryContextSwitches
public long getVoluntaryContextSwitches()Description copied from interface:OSProcessThe number of voluntary context switches the process has made. A voluntary context switch occurs when a process gives up the CPU before its time slice expires (e.g., waiting for I/O).For the current process,
getrusage(RUSAGE_SELF)is used on supported POSIX platforms, which aggregates across all threads. For other processes, platform-specific sources are used (/proc/[pid]/statuson Linux,pson FreeBSD/OpenBSD,/proc/[pid]/usageon Solaris). On macOS, the split is only available for the current process; for other processes this returns 0.- Returns:
- voluntary context switches if available, 0 otherwise.
-
getInvoluntaryContextSwitches
public long getInvoluntaryContextSwitches()Description copied from interface:OSProcessThe number of involuntary context switches the process has made. An involuntary context switch occurs when the scheduler preempts the process (e.g., time slice expired).For the current process,
getrusage(RUSAGE_SELF)is used on supported POSIX platforms, which aggregates across all threads. For other processes, platform-specific sources are used (/proc/[pid]/statuson Linux,pson FreeBSD/OpenBSD,/proc/[pid]/usageon Solaris). On macOS, the split is only available for the current process; for other processes this returns 0.- Returns:
- involuntary context switches if available, 0 otherwise.
-
getBitness
public int getBitness()Description copied from interface:OSProcessAttempts to get the bitness (32 or 64) of the process.- Returns:
- The bitness, if able to be determined, 0 otherwise.
-
getAffinityMask
public long getAffinityMask()Description copied from interface:OSProcessGets the process affinity mask for this process.On Windows systems with more than 64 processors, if the threads of the calling process are in a single processor group, returns the process affinity mask for that group (which may be zero if the specified process is running in a different group). If the calling process contains threads in multiple groups, returns zero.
Because macOS does not export interfaces that identify processors or control thread placement, explicit thread to processor binding is not supported and this method will return a bitmask of all logical processors.
If the Operating System fails to retrieve an affinity mask (e.g., the process has terminated), returns zero.
- Returns:
- a bit vector in which each bit represents the processors that a process is allowed to run on.
-
updateAttributes
public boolean updateAttributes()Description copied from interface:OSProcessAttempts to update process attributes. Returns false if the update fails, which will occur if the process no longer exists.- Returns:
trueif the update was successful, false if the update failed. In addition, on a failed update the process state will be changed toOSProcess.State.INVALID.
-
updateAttributes
Populates this process's attributes from a parsedpsrow. Shared by every BSD platform; differences in the available columns are handled by checking which keys are present in the map.- Parameters:
psMap- the parsedpscolumns for this process- Returns:
trueonce the attributes are populated
-
getStateFromOutput
Maps apssingle-character state to anOSProcess.State.- Parameters:
stateValue- the first character of thepsSTATE column- Returns:
- the corresponding process state
-
getProcessOpenFileLimit
protected static long getProcessOpenFileLimit(long processId, int index) Parses the soft or hard open-file limit for another process from/proc/<pid>/limits.- Parameters:
processId- the process IDindex-1for the soft limit,2for the hard limit- Returns:
- the limit, or
-1if unavailable
-
psKeywords
Returns this platform's orderedpscolumn keys, used both to build thepscommand and to parse its output positionally.- Returns:
- the ordered column keys
-
psCommandArgs
Returns the comma-separatedps -ocolumn list for this platform, derived frompsKeywords().- Returns:
- the
pscolumn argument
-
queryStartTimeMillis
protected long queryStartTimeMillis()Returns this process's start time in epoch milliseconds, or-1to derive it from thepselapsed-time column. The default derives from elapsed time; platforms with an absolute source (DragonFly's/proc) override this.- Returns:
- the start time in epoch milliseconds, or
-1to derive from elapsed time
-
updateThreadCount
protected void updateThreadCount()PopulatesAbstractOSProcess.threadCountfor platforms whosepsoutput lacks annlwpcolumn. The default is a no-op (the count is taken from thenlwpcolumn); OpenBSD and NetBSD override this with a separatepsquery. -
queryArguments
-
queryEnvironmentVariables
-
queryBitness
protected abstract int queryBitness()Queries this process's bitness (32 or 64), or0if unknown.- Returns:
- the bitness
-