All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
oshi.software.os.unix.solaris.SolarisOperatingSystem Maven / Gradle / Ivy
package oshi.software.os.unix.solaris;
import oshi.jna.platform.unix.freebsd.Libc;
import oshi.software.common.AbstractOperatingSystem;
import oshi.software.os.FileSystem;
import oshi.software.os.NetworkParams;
import oshi.software.os.OSProcess;
import oshi.util.ExecutingCommand;
import oshi.util.ParseUtil;
import oshi.util.platform.linux.ProcUtil;
import java.util.ArrayList;
import java.util.List;
/**
* @author angju
*
*/
public class SolarisOperatingSystem extends AbstractOperatingSystem {
private static final long serialVersionUID = 1L;
public SolarisOperatingSystem() {
this.manufacturer = "Oracle";
this.family = "SunOS";
this.version = new SolarisOSVersionInfoEx();
}
/**
* {@inheritDoc}
*/
@Override
public FileSystem getFileSystem() {
return new SolarisFileSystem();
}
/**
* {@inheritDoc}
*/
@Override
public OSProcess[] getProcesses(int limit, ProcessSort sort) {
List procs = getProcessListFromPS(
"ps -eo s,pid,ppid,user,uid,group,gid,nlwp,pri,vsz,rss,etime,time,comm,args");
List sorted = processSort(procs, limit, sort);
return sorted.toArray(new OSProcess[sorted.size()]);
}
/**
* {@inheritDoc}
*/
@Override
public OSProcess getProcess(int pid) {
List procs = getProcessListFromPS(
"ps -o s,pid,ppid,user,uid,group,gid,nlwp,pri,vsz,rss,etime,time,comm,args -p " + pid);
if (procs.isEmpty()) {
return null;
}
return procs.get(0);
}
private List getProcessListFromPS(String psCommand) {
List procs = new ArrayList();
List procList = ExecutingCommand.runNative(psCommand);
if (procList.isEmpty() || procList.size() < 2) {
return procs;
}
// remove header row
procList.remove(0);
// Fill list
for (String proc : procList) {
String[] split = proc.trim().split("\\s+", 15);
// Elements should match ps command order
if (split.length < 15) {
continue;
}
long now = System.currentTimeMillis();
OSProcess sproc = new OSProcess();
switch (split[0].charAt(0)) {
case 'O':
sproc.setState(OSProcess.State.RUNNING);
break;
case 'S':
sproc.setState(OSProcess.State.SLEEPING);
break;
case 'R':
case 'W':
sproc.setState(OSProcess.State.WAITING);
break;
case 'Z':
sproc.setState(OSProcess.State.ZOMBIE);
break;
case 'T':
sproc.setState(OSProcess.State.STOPPED);
break;
default:
sproc.setState(OSProcess.State.OTHER);
break;
}
sproc.setProcessID(ParseUtil.parseIntOrDefault(split[1], 0));
sproc.setParentProcessID(ParseUtil.parseIntOrDefault(split[2], 0));
sproc.setUser(split[3]);
sproc.setUserID(split[4]);
sproc.setGroup(split[5]);
sproc.setGroupID(split[6]);
sproc.setThreadCount(ParseUtil.parseIntOrDefault(split[7], 0));
sproc.setPriority(ParseUtil.parseIntOrDefault(split[8], 0));
// These are in KB, multiply
sproc.setVirtualSize(ParseUtil.parseLongOrDefault(split[9], 0) * 1024);
sproc.setResidentSetSize(ParseUtil.parseLongOrDefault(split[10], 0) * 1024);
// Avoid divide by zero for processes up less than a second
long elapsedTime = ParseUtil.parseDHMSOrDefault(split[11], 0L);
sproc.setUpTime(elapsedTime < 1L ? 1L : elapsedTime);
sproc.setStartTime(now - sproc.getUpTime());
sproc.setUserTime(ParseUtil.parseDHMSOrDefault(split[12], 0L));
sproc.setPath(split[13]);
sproc.setName(sproc.getPath().substring(sproc.getPath().lastIndexOf('/') + 1));
sproc.setCommandLine(split[14]);
// bytes read/written not easily available
procs.add(sproc);
}
return procs;
}
/**
* {@inheritDoc}
*/
@Override
public int getProcessId() {
return Libc.INSTANCE.getpid();
}
/**
* {@inheritDoc}
*/
@Override
public int getProcessCount() {
return ProcUtil.getPidFiles().length;
}
/**
* {@inheritDoc}
*/
@Override
public int getThreadCount() {
List threadList = ExecutingCommand.runNative("ps -eLo pid");
if (!threadList.isEmpty()) {
// Subtract 1 for header
return threadList.size() - 1;
}
return getProcessCount();
}
/**
* {@inheritDoc}
*/
@Override
public NetworkParams getNetworkParams() {
return new SolarisNetworkParams();
}
}