mirror of
https://github.com/outbackdingo/sysadm.git
synced 2026-01-27 10:20:26 +00:00
Add API call to kill processes on the system
pid = <pid>
signal = {INT|QUIT|ABRT|KILL|ALRM|TERM}
REST Request:
-------------------------------
PUT /sysadm/systemmanager
{
"signal" : "KILL",
"pid" : "13939",
"action" : "killproc"
}
REST Response:
-------------------------------
{
"args": {
"killproc": {
"action": "killproc",
"pid": "13939",
"signal": "KILL"
}
}
}
WebSocket Request:
-------------------------------
{
"namespace" : "sysadm",
"args" : {
"pid" : "13939",
"action" : "killproc",
"signal" : "KILL"
},
"id" : "fooid",
"name" : "systemmanager"
}
WebSocket Response:
-------------------------------
{
"args": {
"killproc": {
"action": "killproc",
"pid": "13939",
"signal": "KILL"
}
},
"id": "fooid",
"name": "response",
"namespace": "sysadm"
}
This commit is contained in:
@@ -100,7 +100,7 @@ RestOutputStruct::ExitCode WebSocket::EvaluateBackendRequest(const RestInputStru
|
||||
return EvaluateSysadmNetworkRequest(IN.args, out);
|
||||
}else if(namesp=="rpc" && name=="syscache"){
|
||||
return EvaluateSyscacheRequest(IN.args, out);
|
||||
}else if(namesp=="sysadm" && name=="systeminfo"){
|
||||
}else if(namesp=="sysadm" && name=="systemmanager"){
|
||||
return EvaluateSysadmSystemMgmtRequest(IN.args, out);
|
||||
}else if(namesp=="sysadm" && name=="update"){
|
||||
return EvaluateSysadmUpdateRequest(IN.args, out);
|
||||
@@ -317,6 +317,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmSystemMgmtRequest(const QJso
|
||||
ok = true;
|
||||
out->insert("externalmounts", sysadm::SysMgmt::externalDevicePaths());
|
||||
}
|
||||
if(act=="killproc"){
|
||||
ok = true;
|
||||
out->insert("killproc", sysadm::SysMgmt::killProc(in_args.toObject()));
|
||||
}
|
||||
if(act=="memorystats"){
|
||||
ok = true;
|
||||
out->insert("memorystats", sysadm::SysMgmt::memoryStats());
|
||||
|
||||
@@ -161,6 +161,49 @@ QJsonObject SysMgmt::externalDevicePaths() {
|
||||
return retObject;
|
||||
}
|
||||
|
||||
// Kill a process
|
||||
QJsonObject SysMgmt::killProc(QJsonObject jsin) {
|
||||
QJsonObject retObject;
|
||||
|
||||
QStringList keys = jsin.keys();
|
||||
if (! keys.contains("pid") ) {
|
||||
retObject.insert("error", "Missing required key 'pid'");
|
||||
return retObject;
|
||||
}
|
||||
// Save the target
|
||||
QString pid, sig, tmp;
|
||||
pid = jsin.value("pid").toString();
|
||||
|
||||
if ( keys.contains("signal") ) {
|
||||
tmp = jsin.value("signal").toString();
|
||||
if ( tmp == "HUP" ) {
|
||||
sig = "-1";
|
||||
} else if ( tmp == "INT" ) {
|
||||
sig = "-2";
|
||||
} else if ( tmp == "QUIT" ) {
|
||||
sig = "-3";
|
||||
} else if ( tmp == "ABRT" ) {
|
||||
sig = "-6";
|
||||
} else if ( tmp == "KILL" ) {
|
||||
sig = "-9";
|
||||
} else if ( tmp == "ALRM" ) {
|
||||
sig = "-14";
|
||||
} else if ( tmp == "TERM" ) {
|
||||
sig = "-15";
|
||||
} else {
|
||||
retObject.insert("error", "Invalid signal! (INT|QUIT|ABRT|KILL|ALRM|TERM)");
|
||||
return retObject;
|
||||
}
|
||||
} else {
|
||||
sig = "-9";
|
||||
}
|
||||
|
||||
// This could be switched to kill(2) at some point
|
||||
General::RunCommand("kill " + sig + " " + pid);
|
||||
|
||||
return jsin;
|
||||
}
|
||||
|
||||
// Return information about memory
|
||||
QJsonObject SysMgmt::memoryStats() {
|
||||
QJsonObject retObject;
|
||||
|
||||
@@ -18,9 +18,10 @@ public:
|
||||
static QJsonObject cpuPercentage();
|
||||
static QJsonObject cpuTemps();
|
||||
static QJsonObject externalDevicePaths();
|
||||
static QJsonObject killProc(QJsonObject);
|
||||
static QJsonObject memoryStats();
|
||||
static QJsonObject systemInfo();
|
||||
static QJsonObject procInfo();
|
||||
static QJsonObject systemInfo();
|
||||
};
|
||||
|
||||
} //end of pcbsd namespace
|
||||
|
||||
Reference in New Issue
Block a user